/*! jQuery v1.7 jquery.com | jquery.org/license */
(function(a, b) {
    function cA(a) {
        return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
    }
    function cx(a) {
        if (!cm[a]) {
            var b = c.body, d = f("<" + a + ">").appendTo(b), e = d.css("display");
            d.remove();
            if (e === "none" || e === "") {
                cn || (cn = c.createElement("iframe"), cn.frameBorder = cn.width = cn.height = 0), b.appendChild(cn);
                if (!co || !cn.createElement)
                    co = (cn.contentWindow || cn.contentDocument).document, co.write((c.compatMode === "CSS1Compat" ? "<!doctype html>" : "") + "<html><body>"), co.close();
                d = co.createElement(a), co.body.appendChild(d), e = f.css(d, "display"), b.removeChild(cn)
            }
            cm[a] = e
        }
        return cm[a]
    }
    function cw(a, b) {
        var c = {};
        f.each(cs.concat.apply([], cs.slice(0, b)), function() {
            c[this] = a
        });
        return c
    }
    function cv() {
        ct = b
    }
    function cu() {
        setTimeout(cv, 0);
        return ct = f.now()
    }
    function cl() {
        try {
            return new a.ActiveXObject("Microsoft.XMLHTTP")
        } catch (b) {
        }
    }
    function ck() {
        try {
            return new a.XMLHttpRequest
        } catch (b) {
        }
    }
    function ce(a, c) {
        a.dataFilter && (c = a.dataFilter(c, a.dataType));
        var d = a.dataTypes, e = {}, g, h, i = d.length, j, k = d[0], l, m, n, o, p;
        for (g = 1; g < i; g++) {
            if (g === 1)
                for (h in a.converters)
                    typeof h == "string" && (e[h.toLowerCase()] = a.converters[h]);
            l = k, k = d[g];
            if (k === "*")
                k = l;
            else if (l !== "*" && l !== k) {
                m = l + " " + k, n = e[m] || e["* " + k];
                if (!n) {
                    p = b;
                    for (o in e) {
                        j = o.split(" ");
                        if (j[0] === l || j[0] === "*") {
                            p = e[j[1] + " " + k];
                            if (p) {
                                o = e[o], o === !0 ? n = p : p === !0 && (n = o);
                                break
                            }
                        }
                    }
                }
                !n && !p && f.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c)))
            }
        }
        return c
    }
    function cd(a, c, d) {
        var e = a.contents, f = a.dataTypes, g = a.responseFields, h, i, j, k;
        for (i in g)
            i in d && (c[g[i]] = d[i]);
        while (f[0] === "*")
            f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type"));
        if (h)
            for (i in e)
                if (e[i] && e[i].test(h)) {
                    f.unshift(i);
                    break
                }
        if (f[0]in d)
            j = f[0];
        else {
            for (i in d) {
                if (!f[0] || a.converters[i + " " + f[0]]) {
                    j = i;
                    break
                }
                k || (k = i)
            }
            j = j || k
        }
        if (j) {
            j !== f[0] && f.unshift(j);
            return d[j]
        }
    }
    function cc(a, b, c, d) {
        if (f.isArray(b))
            f.each(b, function(b, e) {
                c || bG.test(a) ? d(a, e) : cc(a + "[" + (typeof e == "object" || f.isArray(e) ? b : "") + "]", e, c, d)
            });
        else if (!c && b != null && typeof b == "object")
            for (var e in b)
                cc(a + "[" + e + "]", b[e], c, d);
        else
            d(a, b)
    }
    function cb(a, c) {
        var d, e, g = f.ajaxSettings.flatOptions || {};
        for (d in c)
            c[d] !== b && ((g[d] ? a : e || (e = {}))[d] = c[d]);
        e && f.extend(!0, a, e)
    }
    function ca(a, c, d, e, f, g) {
        f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
        var h = a[f], i = 0, j = h ? h.length : 0, k = a === bV, l;
        for (; i < j && (k || !l); i++)
            l = h[i](c, d, e), typeof l == "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = ca(a, c, d, e, l, g)));
        (k || !l) && !g["*"] && (l = ca(a, c, d, e, "*", g));
        return l
    }
    function b_(a) {
        return function(b, c) {
            typeof b != "string" && (c = b, b = "*");
            if (f.isFunction(c)) {
                var d = b.toLowerCase().split(bR), e = 0, g = d.length, h, i, j;
                for (; e < g; e++)
                    h = d[e], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c)
            }
        }
    }
    function bE(a, b, c) {
        var d = b === "width" ? a.offsetWidth : a.offsetHeight, e = b === "width" ? bz : bA;
        if (d > 0) {
            c !== "border" && f.each(e, function() {
                c || (d -= parseFloat(f.css(a, "padding" + this)) || 0), c === "margin" ? d += parseFloat(f.css(a, c + this)) || 0 : d -= parseFloat(f.css(a, "border" + this + "Width")) || 0
            });
            return d + "px"
        }
        d = bB(a, b, b);
        if (d < 0 || d == null)
            d = a.style[b] || 0;
        d = parseFloat(d) || 0, c && f.each(e, function() {
            d += parseFloat(f.css(a, "padding" + this)) || 0, c !== "padding" && (d += parseFloat(f.css(a, "border" + this + "Width")) || 0), c === "margin" && (d += parseFloat(f.css(a, c + this)) || 0)
        });
        return d + "px"
    }
    function br(a, b) {
        b.src ? f.ajax({url: b.src, async: !1, dataType: "script"}) : f.globalEval((b.text || b.textContent || b.innerHTML || "").replace(bi, "/*$0*/")), b.parentNode && b.parentNode.removeChild(b)
    }
    function bq(a) {
        var b = (a.nodeName || "").toLowerCase();
        b === "input" ? bp(a) : b !== "script" && typeof a.getElementsByTagName != "undefined" && f.grep(a.getElementsByTagName("input"), bp)
    }
    function bp(a) {
        if (a.type === "checkbox" || a.type === "radio")
            a.defaultChecked = a.checked
    }
    function bo(a) {
        return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : []
    }
    function bn(a, b) {
        var c;
        if (b.nodeType === 1) {
            b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase();
            if (c === "object")
                b.outerHTML = a.outerHTML;
            else if (c !== "input" || a.type !== "checkbox" && a.type !== "radio") {
                if (c === "option")
                    b.selected = a.defaultSelected;
                else if (c === "input" || c === "textarea")
                    b.defaultValue = a.defaultValue
            } else
                a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value);
            b.removeAttribute(f.expando)
        }
    }
    function bm(a, b) {
        if (b.nodeType === 1 && !!f.hasData(a)) {
            var c, d, e, g = f._data(a), h = f._data(b, g), i = g.events;
            if (i) {
                delete h.handle, h.events = {};
                for (c in i)
                    for (d = 0, e = i[c].length; d < e; d++)
                        f.event.add(b, c + (i[c][d].namespace ? "." : "") + i[c][d].namespace, i[c][d], i[c][d].data)
            }
            h.data && (h.data = f.extend({}, h.data))
        }
    }
    function bl(a, b) {
        return f.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
    }
    function X(a) {
        var b = Y.split(" "), c = a.createDocumentFragment();
        if (c.createElement)
            while (b.length)
                c.createElement(b.pop());
        return c
    }
    function W(a, b, c) {
        b = b || 0;
        if (f.isFunction(b))
            return f.grep(a, function(a, d) {
                var e = !!b.call(a, d, a);
                return e === c
            });
        if (b.nodeType)
            return f.grep(a, function(a, d) {
                return a === b === c
            });
        if (typeof b == "string") {
            var d = f.grep(a, function(a) {
                return a.nodeType === 1
            });
            if (R.test(b))
                return f.filter(b, d, !c);
            b = f.filter(b, d)
        }
        return f.grep(a, function(a, d) {
            return f.inArray(a, b) >= 0 === c
        })
    }
    function V(a) {
        return!a || !a.parentNode || a.parentNode.nodeType === 11
    }
    function N() {
        return!0
    }
    function M() {
        return!1
    }
    function n(a, b, c) {
        var d = b + "defer", e = b + "queue", g = b + "mark", h = f._data(a, d);
        h && (c === "queue" || !f._data(a, e)) && (c === "mark" || !f._data(a, g)) && setTimeout(function() {
            !f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire())
        }, 0)
    }
    function m(a) {
        for (var b in a) {
            if (b === "data" && f.isEmptyObject(a[b]))
                continue;
            if (b !== "toJSON")
                return!1
        }
        return!0
    }
    function l(a, c, d) {
        if (d === b && a.nodeType === 1) {
            var e = "data-" + c.replace(k, "-$1").toLowerCase();
            d = a.getAttribute(e);
            if (typeof d == "string") {
                try {
                    d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : f.isNumeric(d) ? parseFloat(d) : j.test(d) ? f.parseJSON(d) : d
                } catch (g) {
                }
                f.data(a, c, d)
            } else
                d = b
        }
        return d
    }
    function h(a) {
        var b = g[a] = {}, c, d;
        a = a.split(/\s+/);
        for (c = 0, d = a.length; c < d; c++)
            b[a[c]] = !0;
        return b
    }
    var c = a.document, d = a.navigator, e = a.location, f = function() {
        function K() {
            if (!e.isReady) {
                try {
                    c.documentElement.doScroll("left")
                } catch (a) {
                    setTimeout(K, 1);
                    return
                }
                e.ready()
            }
        }
        var e = function(a, b) {
            return new e.fn.init(a, b, h)
        }, f = a.jQuery, g = a.$, h, i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, j = /\S/, k = /^\s+/, l = /\s+$/, m = /\d/, n = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, o = /^[\],:{}\s]*$/, p = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, q = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, r = /(?:^|:|,)(?:\s*\[)+/g, s = /(webkit)[ \/]([\w.]+)/, t = /(opera)(?:.*version)?[ \/]([\w.]+)/, u = /(msie) ([\w.]+)/, v = /(mozilla)(?:.*? rv:([\w.]+))?/, w = /-([a-z]|[0-9])/ig, x = /^-ms-/, y = function(a, b) {
            return(b + "").toUpperCase()
        }, z = d.userAgent, A, B, C, D = Object.prototype.toString, E = Object.prototype.hasOwnProperty, F = Array.prototype.push, G = Array.prototype.slice, H = String.prototype.trim, I = Array.prototype.indexOf, J = {};
        e.fn = e.prototype = {constructor: e, init: function(a, d, f) {
                var g, h, j, k;
                if (!a)
                    return this;
                if (a.nodeType) {
                    this.context = this[0] = a, this.length = 1;
                    return this
                }
                if (a === "body" && !d && c.body) {
                    this.context = c, this[0] = c.body, this.selector = a, this.length = 1;
                    return this
                }
                if (typeof a == "string") {
                    a.charAt(0) !== "<" || a.charAt(a.length - 1) !== ">" || a.length < 3 ? g = i.exec(a) : g = [null, a, null];
                    if (g && (g[1] || !d)) {
                        if (g[1]) {
                            d = d instanceof e ? d[0] : d, k = d ? d.ownerDocument || d : c, j = n.exec(a), j ? e.isPlainObject(d) ? (a = [c.createElement(j[1])], e.fn.attr.call(a, d, !0)) : a = [k.createElement(j[1])] : (j = e.buildFragment([g[1]], [k]), a = (j.cacheable ? e.clone(j.fragment) : j.fragment).childNodes);
                            return e.merge(this, a)
                        }
                        h = c.getElementById(g[2]);
                        if (h && h.parentNode) {
                            if (h.id !== g[2])
                                return f.find(a);
                            this.length = 1, this[0] = h
                        }
                        this.context = c, this.selector = a;
                        return this
                    }
                    return!d || d.jquery ? (d || f).find(a) : this.constructor(d).find(a)
                }
                if (e.isFunction(a))
                    return f.ready(a);
                a.selector !== b && (this.selector = a.selector, this.context = a.context);
                return e.makeArray(a, this)
            }, selector: "", jquery: "1.7", length: 0, size: function() {
                return this.length
            }, toArray: function() {
                return G.call(this, 0)
            }, get: function(a) {
                return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
            }, pushStack: function(a, b, c) {
                var d = this.constructor();
                e.isArray(a) ? F.apply(d, a) : e.merge(d, a), d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")");
                return d
            }, each: function(a, b) {
                return e.each(this, a, b)
            }, ready: function(a) {
                e.bindReady(), B.add(a);
                return this
            }, eq: function(a) {
                return a === -1 ? this.slice(a) : this.slice(a, +a + 1)
            }, first: function() {
                return this.eq(0)
            }, last: function() {
                return this.eq(-1)
            }, slice: function() {
                return this.pushStack(G.apply(this, arguments), "slice", G.call(arguments).join(","))
            }, map: function(a) {
                return this.pushStack(e.map(this, function(b, c) {
                    return a.call(b, c, b)
                }))
            }, end: function() {
                return this.prevObject || this.constructor(null)
            }, push: F, sort: [].sort, splice: [].splice}, e.fn.init.prototype = e.fn, e.extend = e.fn.extend = function() {
            var a, c, d, f, g, h, i = arguments[0] || {}, j = 1, k = arguments.length, l = !1;
            typeof i == "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i != "object" && !e.isFunction(i) && (i = {}), k === j && (i = this, --j);
            for (; j < k; j++)
                if ((a = arguments[j]) != null)
                    for (c in a) {
                        d = i[c], f = a[c];
                        if (i === f)
                            continue;
                        l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : []) : h = d && e.isPlainObject(d) ? d : {}, i[c] = e.extend(l, h, f)) : f !== b && (i[c] = f)
                    }
            return i
        }, e.extend({noConflict: function(b) {
                a.$ === e && (a.$ = g), b && a.jQuery === e && (a.jQuery = f);
                return e
            }, isReady: !1, readyWait: 1, holdReady: function(a) {
                a ? e.readyWait++ : e.ready(!0)
            }, ready: function(a) {
                if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {
                    if (!c.body)
                        return setTimeout(e.ready, 1);
                    e.isReady = !0;
                    if (a !== !0 && --e.readyWait > 0)
                        return;
                    B.fireWith(c, [e]), e.fn.trigger && e(c).trigger("ready").unbind("ready")
                }
            }, bindReady: function() {
                if (!B) {
                    B = e.Callbacks("once memory");
                    if (c.readyState === "complete")
                        return setTimeout(e.ready, 1);
                    if (c.addEventListener)
                        c.addEventListener("DOMContentLoaded", C, !1), a.addEventListener("load", e.ready, !1);
                    else if (c.attachEvent) {
                        c.attachEvent("onreadystatechange", C), a.attachEvent("onload", e.ready);
                        var b = !1;
                        try {
                            b = a.frameElement == null
                        } catch (d) {
                        }
                        c.documentElement.doScroll && b && K()
                    }
                }
            }, isFunction: function(a) {
                return e.type(a) === "function"
            }, isArray: Array.isArray || function(a) {
                return e.type(a) === "array"
            }, isWindow: function(a) {
                return a && typeof a == "object" && "setInterval"in a
            }, isNumeric: function(a) {
                return a != null && m.test(a) && !isNaN(a)
            }, type: function(a) {
                return a == null ? String(a) : J[D.call(a)] || "object"
            }, isPlainObject: function(a) {
                if (!a || e.type(a) !== "object" || a.nodeType || e.isWindow(a))
                    return!1;
                try {
                    if (a.constructor && !E.call(a, "constructor") && !E.call(a.constructor.prototype, "isPrototypeOf"))
                        return!1
                } catch (c) {
                    return!1
                }
                var d;
                for (d in a)
                    ;
                return d === b || E.call(a, d)
            }, isEmptyObject: function(a) {
                for (var b in a)
                    return!1;
                return!0
            }, error: function(a) {
                throw a
            }, parseJSON: function(b) {
                if (typeof b != "string" || !b)
                    return null;
                b = e.trim(b);
                if (a.JSON && a.JSON.parse)
                    return a.JSON.parse(b);
                if (o.test(b.replace(p, "@").replace(q, "]").replace(r, "")))
                    return(new Function("return " + b))();
                e.error("Invalid JSON: " + b)
            }, parseXML: function(c) {
                var d, f;
                try {
                    a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
                } catch (g) {
                    d = b
                }
                (!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && e.error("Invalid XML: " + c);
                return d
            }, noop: function() {
            }, globalEval: function(b) {
                b && j.test(b) && (a.execScript || function(b) {
                    a.eval.call(a, b)
                })(b)
            }, camelCase: function(a) {
                return a.replace(x, "ms-").replace(w, y)
            }, nodeName: function(a, b) {
                return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
            }, each: function(a, c, d) {
                var f, g = 0, h = a.length, i = h === b || e.isFunction(a);
                if (d) {
                    if (i) {
                        for (f in a)
                            if (c.apply(a[f], d) === !1)
                                break
                    } else
                        for (; g < h; )
                            if (c.apply(a[g++], d) === !1)
                                break
                } else if (i) {
                    for (f in a)
                        if (c.call(a[f], f, a[f]) === !1)
                            break
                } else
                    for (; g < h; )
                        if (c.call(a[g], g, a[g++]) === !1)
                            break;
                return a
            }, trim: H ? function(a) {
                return a == null ? "" : H.call(a)
            } : function(a) {
                return a == null ? "" : (a + "").replace(k, "").replace(l, "")
            }, makeArray: function(a, b) {
                var c = b || [];
                if (a != null) {
                    var d = e.type(a);
                    a.length == null || d === "string" || d === "function" || d === "regexp" || e.isWindow(a) ? F.call(c, a) : e.merge(c, a)
                }
                return c
            }, inArray: function(a, b, c) {
                var d;
                if (b) {
                    if (I)
                        return I.call(b, a, c);
                    d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0;
                    for (; c < d; c++)
                        if (c in b && b[c] === a)
                            return c
                }
                return-1
            }, merge: function(a, c) {
                var d = a.length, e = 0;
                if (typeof c.length == "number")
                    for (var f = c.length; e < f; e++)
                        a[d++] = c[e];
                else
                    while (c[e] !== b)
                        a[d++] = c[e++];
                a.length = d;
                return a
            }, grep: function(a, b, c) {
                var d = [], e;
                c = !!c;
                for (var f = 0, g = a.length; f < g; f++)
                    e = !!b(a[f], f), c !== e && d.push(a[f]);
                return d
            }, map: function(a, c, d) {
                var f, g, h = [], i = 0, j = a.length, k = a instanceof e || j !== b && typeof j == "number" && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
                if (k)
                    for (; i < j; i++)
                        f = c(a[i], i, d), f != null && (h[h.length] = f);
                else
                    for (g in a)
                        f = c(a[g], g, d), f != null && (h[h.length] = f);
                return h.concat.apply([], h)
            }, guid: 1, proxy: function(a, c) {
                if (typeof c == "string") {
                    var d = a[c];
                    c = a, a = d
                }
                if (!e.isFunction(a))
                    return b;
                var f = G.call(arguments, 2), g = function() {
                    return a.apply(c, f.concat(G.call(arguments)))
                };
                g.guid = a.guid = a.guid || g.guid || e.guid++;
                return g
            }, access: function(a, c, d, f, g, h) {
                var i = a.length;
                if (typeof c == "object") {
                    for (var j in c)
                        e.access(a, j, c[j], f, g, d);
                    return a
                }
                if (d !== b) {
                    f = !h && f && e.isFunction(d);
                    for (var k = 0; k < i; k++)
                        g(a[k], c, f ? d.call(a[k], k, g(a[k], c)) : d, h);
                    return a
                }
                return i ? g(a[0], c) : b
            }, now: function() {
                return(new Date).getTime()
            }, uaMatch: function(a) {
                a = a.toLowerCase();
                var b = s.exec(a) || t.exec(a) || u.exec(a) || a.indexOf("compatible") < 0 && v.exec(a) || [];
                return{browser: b[1] || "", version: b[2] || "0"}
            }, sub: function() {
                function a(b, c) {
                    return new a.fn.init(b, c)
                }
                e.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function(d, f) {
                    f && f instanceof e && !(f instanceof a) && (f = a(f));
                    return e.fn.init.call(this, d, f, b)
                }, a.fn.init.prototype = a.fn;
                var b = a(c);
                return a
            }, browser: {}}), e.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(a, b) {
            J["[object " + b + "]"] = b.toLowerCase()
        }), A = e.uaMatch(z), A.browser && (e.browser[A.browser] = !0, e.browser.version = A.version), e.browser.webkit && (e.browser.safari = !0), j.test(" ") && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/), h = e(c), c.addEventListener ? C = function() {
            c.removeEventListener("DOMContentLoaded", C, !1), e.ready()
        } : c.attachEvent && (C = function() {
            c.readyState === "complete" && (c.detachEvent("onreadystatechange", C), e.ready())
        }), typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function() {
            return e
        });
        return e
    }(), g = {};
    f.Callbacks = function(a) {
        a = a ? g[a] || h(a) : {};
        var c = [], d = [], e, i, j, k, l, m = function(b) {
            var d, e, g, h, i;
            for (d = 0, e = b.length; d < e; d++)
                g = b[d], h = f.type(g), h === "array" ? m(g) : h === "function" && (!a.unique || !o.has(g)) && c.push(g)
        }, n = function(b, f) {
            f = f || [], e = !a.memory || [b, f], i = !0, l = j || 0, j = 0, k = c.length;
            for (; c && l < k; l++)
                if (c[l].apply(b, f) === !1 && a.stopOnFalse) {
                    e = !0;
                    break
                }
            i = !1, c && (a.once ? e === !0 ? o.disable() : c = [] : d && d.length && (e = d.shift(), o.fireWith(e[0], e[1])))
        }, o = {add: function() {
                if (c) {
                    var a = c.length;
                    m(arguments), i ? k = c.length : e && e !== !0 && (j = a, n(e[0], e[1]))
                }
                return this
            }, remove: function() {
                if (c) {
                    var b = arguments, d = 0, e = b.length;
                    for (; d < e; d++)
                        for (var f = 0; f < c.length; f++)
                            if (b[d] === c[f]) {
                                i && f <= k && (k--, f <= l && l--), c.splice(f--, 1);
                                if (a.unique)
                                    break
                            }
                }
                return this
            }, has: function(a) {
                if (c) {
                    var b = 0, d = c.length;
                    for (; b < d; b++)
                        if (a === c[b])
                            return!0
                }
                return!1
            }, empty: function() {
                c = [];
                return this
            }, disable: function() {
                c = d = e = b;
                return this
            }, disabled: function() {
                return!c
            }, lock: function() {
                d = b, (!e || e === !0) && o.disable();
                return this
            }, locked: function() {
                return!d
            }, fireWith: function(b, c) {
                d && (i ? a.once || d.push([b, c]) : (!a.once || !e) && n(b, c));
                return this
            }, fire: function() {
                o.fireWith(this, arguments);
                return this
            }, fired: function() {
                return!!e
            }};
        return o
    };
    var i = [].slice;
    f.extend({Deferred: function(a) {
            var b = f.Callbacks("once memory"), c = f.Callbacks("once memory"), d = f.Callbacks("memory"), e = "pending", g = {resolve: b, reject: c, notify: d}, h = {done: b.add, fail: c.add, progress: d.add, state: function() {
                    return e
                }, isResolved: b.fired, isRejected: c.fired, then: function(a, b, c) {
                    i.done(a).fail(b).progress(c);
                    return this
                }, always: function() {
                    return i.done.apply(i, arguments).fail.apply(i, arguments)
                }, pipe: function(a, b, c) {
                    return f.Deferred(function(d) {
                        f.each({done: [a, "resolve"], fail: [b, "reject"], progress: [c, "notify"]}, function(a, b) {
                            var c = b[0], e = b[1], g;
                            f.isFunction(c) ? i[a](function() {
                                g = c.apply(this, arguments), g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify) : d[e + "With"](this === i ? d : this, [g])
                            }) : i[a](d[e])
                        })
                    }).promise()
                }, promise: function(a) {
                    if (a == null)
                        a = h;
                    else
                        for (var b in h)
                            a[b] = h[b];
                    return a
                }}, i = h.promise({}), j;
            for (j in g)
                i[j] = g[j].fire, i[j + "With"] = g[j].fireWith;
            i.done(function() {
                e = "resolved"
            }, c.disable, d.lock).fail(function() {
                e = "rejected"
            }, b.disable, d.lock), a && a.call(i, i);
            return i
        }, when: function(a) {
            function m(a) {
                return function(b) {
                    e[a] = arguments.length > 1 ? i.call(arguments, 0) : b, j.notifyWith(k, e)
                }
            }
            function l(a) {
                return function(c) {
                    b[a] = arguments.length > 1 ? i.call(arguments, 0) : c, --g || j.resolveWith(j, b)
                }
            }
            var b = i.call(arguments, 0), c = 0, d = b.length, e = Array(d), g = d, h = d, j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(), k = j.promise();
            if (d > 1) {
                for (; c < d; c++)
                    b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c)) : --g;
                g || j.resolveWith(j, b)
            } else
                j !== a && j.resolveWith(j, d ? [a] : []);
            return k
        }}), f.support = function() {
        var a = c.createElement("div"), b = c.documentElement, d, e, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u;
        a.setAttribute("className", "t"), a.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>", d = a.getElementsByTagName("*"), e = a.getElementsByTagName("a")[0];
        if (!d || !d.length || !e)
            return{};
        g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = a.getElementsByTagName("input")[0], k = {leadingWhitespace: a.firstChild.nodeType === 3, tbody: !a.getElementsByTagName("tbody").length, htmlSerialize: !!a.getElementsByTagName("link").length, style: /top/.test(e.getAttribute("style")), hrefNormalized: e.getAttribute("href") === "/a", opacity: /^0.55/.test(e.style.opacity), cssFloat: !!e.style.cssFloat, unknownElems: !!a.getElementsByTagName("nav").length, checkOn: i.value === "on", optSelected: h.selected, getSetAttribute: a.className !== "t", enctype: !!c.createElement("form").enctype, submitBubbles: !0, changeBubbles: !0, focusinBubbles: !1, deleteExpando: !0, noCloneEvent: !0, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableMarginRight: !0}, i.checked = !0, k.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, k.optDisabled = !h.disabled;
        try {
            delete a.test
        } catch (v) {
            k.deleteExpando = !1
        }
        !a.addEventListener && a.attachEvent && a.fireEvent && (a.attachEvent("onclick", function() {
            k.noCloneEvent = !1
        }), a.cloneNode(!0).fireEvent("onclick")), i = c.createElement("input"), i.value = "t", i.setAttribute("type", "radio"), k.radioValue = i.value === "t", i.setAttribute("checked", "checked"), a.appendChild(i), l = c.createDocumentFragment(), l.appendChild(a.lastChild), k.checkClone = l.cloneNode(!0).cloneNode(!0).lastChild.checked, a.innerHTML = "", a.style.width = a.style.paddingLeft = "1px", m = c.getElementsByTagName("body")[0], o = c.createElement(m ? "div" : "body"), p = {visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none"}, m && f.extend(p, {position: "absolute", left: "-999px", top: "-999px"});
        for (t in p)
            o.style[t] = p[t];
        o.appendChild(a), n = m || b, n.insertBefore(o, n.firstChild), k.appendChecked = i.checked, k.boxModel = a.offsetWidth === 2, "zoom"in a.style && (a.style.display = "inline", a.style.zoom = 1, k.inlineBlockNeedsLayout = a.offsetWidth === 2, a.style.display = "", a.innerHTML = "<div style='width:4px;'></div>", k.shrinkWrapBlocks = a.offsetWidth !== 2), a.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>", q = a.getElementsByTagName("td"), u = q[0].offsetHeight === 0, q[0].style.display = "", q[1].style.display = "none", k.reliableHiddenOffsets = u && q[0].offsetHeight === 0, a.innerHTML = "", c.defaultView && c.defaultView.getComputedStyle && (j = c.createElement("div"), j.style.width = "0", j.style.marginRight = "0", a.appendChild(j), k.reliableMarginRight = (parseInt((c.defaultView.getComputedStyle(j, null) || {marginRight: 0}).marginRight, 10) || 0) === 0);
        if (a.attachEvent)
            for (t in{submit:1, change:1, focusin:1})
                s = "on" + t, u = s in a, u || (a.setAttribute(s, "return;"), u = typeof a[s] == "function"), k[t + "Bubbles"] = u;
        f(function() {
            var a, b, d, e, g, h, i = 1, j = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;", l = "visibility:hidden;border:0;", n = "style='" + j + "border:5px solid #000;padding:0;'", p = "<div " + n + "><div></div></div>" + "<table " + n + " cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>";
            m = c.getElementsByTagName("body")[0];
            !m || (a = c.createElement("div"), a.style.cssText = l + "width:0;height:0;position:static;top:0;margin-top:" + i + "px", m.insertBefore(a, m.firstChild), o = c.createElement("div"), o.style.cssText = j + l, o.innerHTML = p, a.appendChild(o), b = o.firstChild, d = b.firstChild, g = b.nextSibling.firstChild.firstChild, h = {doesNotAddBorder: d.offsetTop !== 5, doesAddBorderForTableAndCells: g.offsetTop === 5}, d.style.position = "fixed", d.style.top = "20px", h.fixedPosition = d.offsetTop === 20 || d.offsetTop === 15, d.style.position = d.style.top = "", b.style.overflow = "hidden", b.style.position = "relative", h.subtractsBorderForOverflowNotVisible = d.offsetTop === -5, h.doesNotIncludeMarginInBodyOffset = m.offsetTop !== i, m.removeChild(a), o = a = null, f.extend(k, h))
        }), o.innerHTML = "", n.removeChild(o), o = l = g = h = m = j = a = i = null;
        return k
    }(), f.boxModel = f.support.boxModel;
    var j = /^(?:\{.*\}|\[.*\])$/, k = /([A-Z])/g;
    f.extend({cache: {}, uuid: 0, expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""), noData: {embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0}, hasData: function(a) {
            a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando];
            return!!a && !m(a)
        }, data: function(a, c, d, e) {
            if (!!f.acceptData(a)) {
                var g, h, i, j = f.expando, k = typeof c == "string", l = a.nodeType, m = l ? f.cache : a, n = l ? a[f.expando] : a[f.expando] && f.expando, o = c === "events";
                if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b)
                    return;
                n || (l ? a[f.expando] = n = ++f.uuid : n = f.expando), m[n] || (m[n] = {}, l || (m[n].toJSON = f.noop));
                if (typeof c == "object" || typeof c == "function")
                    e ? m[n] = f.extend(m[n], c) : m[n].data = f.extend(m[n].data, c);
                g = h = m[n], e || (h.data || (h.data = {}), h = h.data), d !== b && (h[f.camelCase(c)] = d);
                if (o && !h[c])
                    return g.events;
                k ? (i = h[c], i == null && (i = h[f.camelCase(c)])) : i = h;
                return i
            }
        }, removeData: function(a, b, c) {
            if (!!f.acceptData(a)) {
                var d, e, g, h = f.expando, i = a.nodeType, j = i ? f.cache : a, k = i ? a[f.expando] : f.expando;
                if (!j[k])
                    return;
                if (b) {
                    d = c ? j[k] : j[k].data;
                    if (d) {
                        f.isArray(b) ? b = b : b in d ? b = [b] : (b = f.camelCase(b), b in d ? b = [b] : b = b.split(" "));
                        for (e = 0, g = b.length; e < g; e++)
                            delete d[b[e]];
                        if (!(c ? m : f.isEmptyObject)(d))
                            return
                    }
                }
                if (!c) {
                    delete j[k].data;
                    if (!m(j[k]))
                        return
                }
                f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null, i && (f.support.deleteExpando ? delete a[f.expando] : a.removeAttribute ? a.removeAttribute(f.expando) : a[f.expando] = null)
            }
        }, _data: function(a, b, c) {
            return f.data(a, b, c, !0)
        }, acceptData: function(a) {
            if (a.nodeName) {
                var b = f.noData[a.nodeName.toLowerCase()];
                if (b)
                    return b !== !0 && a.getAttribute("classid") === b
            }
            return!0
        }}), f.fn.extend({data: function(a, c) {
            var d, e, g, h = null;
            if (typeof a == "undefined") {
                if (this.length) {
                    h = f.data(this[0]);
                    if (this[0].nodeType === 1 && !f._data(this[0], "parsedAttrs")) {
                        e = this[0].attributes;
                        for (var i = 0, j = e.length; i < j; i++)
                            g = e[i].name, g.indexOf("data-") === 0 && (g = f.camelCase(g.substring(5)), l(this[0], g, h[g]));
                        f._data(this[0], "parsedAttrs", !0)
                    }
                }
                return h
            }
            if (typeof a == "object")
                return this.each(function() {
                    f.data(this, a)
                });
            d = a.split("."), d[1] = d[1] ? "." + d[1] : "";
            if (c === b) {
                h = this.triggerHandler("getData" + d[1] + "!", [d[0]]), h === b && this.length && (h = f.data(this[0], a), h = l(this[0], a, h));
                return h === b && d[1] ? this.data(d[0]) : h
            }
            return this.each(function() {
                var b = f(this), e = [d[0], c];
                b.triggerHandler("setData" + d[1] + "!", e), f.data(this, a, c), b.triggerHandler("changeData" + d[1] + "!", e)
            })
        }, removeData: function(a) {
            return this.each(function() {
                f.removeData(this, a)
            })
        }}), f.extend({_mark: function(a, b) {
            a && (b = (b || "fx") + "mark", f._data(a, b, (f._data(a, b) || 0) + 1))
        }, _unmark: function(a, b, c) {
            a !== !0 && (c = b, b = a, a = !1);
            if (b) {
                c = c || "fx";
                var d = c + "mark", e = a ? 0 : (f._data(b, d) || 1) - 1;
                e ? f._data(b, d, e) : (f.removeData(b, d, !0), n(b, c, "mark"))
            }
        }, queue: function(a, b, c) {
            var d;
            if (a) {
                b = (b || "fx") + "queue", d = f._data(a, b), c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c)) : d.push(c));
                return d || []
            }
        }, dequeue: function(a, b) {
            b = b || "fx";
            var c = f.queue(a, b), d = c.shift(), e = {};
            d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), f._data(a, b + ".run", e), d.call(a, function() {
                f.dequeue(a, b)
            }, e)), c.length || (f.removeData(a, b + "queue " + b + ".run", !0), n(a, b, "queue"))
        }}), f.fn.extend({queue: function(a, c) {
            typeof a != "string" && (c = a, a = "fx");
            if (c === b)
                return f.queue(this[0], a);
            return this.each(function() {
                var b = f.queue(this, a, c);
                a === "fx" && b[0] !== "inprogress" && f.dequeue(this, a)
            })
        }, dequeue: function(a) {
            return this.each(function() {
                f.dequeue(this, a)
            })
        }, delay: function(a, b) {
            a = f.fx ? f.fx.speeds[a] || a : a, b = b || "fx";
            return this.queue(b, function(b, c) {
                var d = setTimeout(b, a);
                c.stop = function() {
                    clearTimeout(d)
                }
            })
        }, clearQueue: function(a) {
            return this.queue(a || "fx", [])
        }, promise: function(a, c) {
            function m() {
                --h || d.resolveWith(e, [e])
            }
            typeof a != "string" && (c = a, a = b), a = a || "fx";
            var d = f.Deferred(), e = this, g = e.length, h = 1, i = a + "defer", j = a + "queue", k = a + "mark", l;
            while (g--)
                if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks("once memory"), !0))
                    h++, l.add(m);
            m();
            return d.promise()
        }});
    var o = /[\n\t\r]/g, p = /\s+/, q = /\r/g, r = /^(?:button|input)$/i, s = /^(?:button|input|object|select|textarea)$/i, t = /^a(?:rea)?$/i, u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, v = f.support.getSetAttribute, w, x, y;
    f.fn.extend({attr: function(a, b) {
            return f.access(this, a, b, !0, f.attr)
        }, removeAttr: function(a) {
            return this.each(function() {
                f.removeAttr(this, a)
            })
        }, prop: function(a, b) {
            return f.access(this, a, b, !0, f.prop)
        }, removeProp: function(a) {
            a = f.propFix[a] || a;
            return this.each(function() {
                try {
                    this[a] = b, delete this[a]
                } catch (c) {
                }
            })
        }, addClass: function(a) {
            var b, c, d, e, g, h, i;
            if (f.isFunction(a))
                return this.each(function(b) {
                    f(this).addClass(a.call(this, b, this.className))
                });
            if (a && typeof a == "string") {
                b = a.split(p);
                for (c = 0, d = this.length; c < d; c++) {
                    e = this[c];
                    if (e.nodeType === 1)
                        if (!e.className && b.length === 1)
                            e.className = a;
                        else {
                            g = " " + e.className + " ";
                            for (h = 0, i = b.length; h < i; h++)
                                ~g.indexOf(" " + b[h] + " ") || (g += b[h] + " ");
                            e.className = f.trim(g)
                        }
                }
            }
            return this
        }, removeClass: function(a) {
            var c, d, e, g, h, i, j;
            if (f.isFunction(a))
                return this.each(function(b) {
                    f(this).removeClass(a.call(this, b, this.className))
                });
            if (a && typeof a == "string" || a === b) {
                c = (a || "").split(p);
                for (d = 0, e = this.length; d < e; d++) {
                    g = this[d];
                    if (g.nodeType === 1 && g.className)
                        if (a) {
                            h = (" " + g.className + " ").replace(o, " ");
                            for (i = 0, j = c.length; i < j; i++)
                                h = h.replace(" " + c[i] + " ", " ");
                            g.className = f.trim(h)
                        } else
                            g.className = ""
                }
            }
            return this
        }, toggleClass: function(a, b) {
            var c = typeof a, d = typeof b == "boolean";
            if (f.isFunction(a))
                return this.each(function(c) {
                    f(this).toggleClass(a.call(this, c, this.className, b), b)
                });
            return this.each(function() {
                if (c === "string") {
                    var e, g = 0, h = f(this), i = b, j = a.split(p);
                    while (e = j[g++])
                        i = d ? i : !h.hasClass(e), h[i ? "addClass" : "removeClass"](e)
                } else if (c === "undefined" || c === "boolean")
                    this.className && f._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : f._data(this, "__className__") || ""
            })
        }, hasClass: function(a) {
            var b = " " + a + " ", c = 0, d = this.length;
            for (; c < d; c++)
                if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(o, " ").indexOf(b) > -1)
                    return!0;
            return!1
        }, val: function(a) {
            var c, d, e, g = this[0];
            if (!arguments.length) {
                if (g) {
                    c = f.valHooks[g.nodeName.toLowerCase()] || f.valHooks[g.type];
                    if (c && "get"in c && (d = c.get(g, "value")) !== b)
                        return d;
                    d = g.value;
                    return typeof d == "string" ? d.replace(q, "") : d == null ? "" : d
                }
                return b
            }
            e = f.isFunction(a);
            return this.each(function(d) {
                var g = f(this), h;
                if (this.nodeType === 1) {
                    e ? h = a.call(this, d, g.val()) : h = a, h == null ? h = "" : typeof h == "number" ? h += "" : f.isArray(h) && (h = f.map(h, function(a) {
                        return a == null ? "" : a + ""
                    })), c = f.valHooks[this.nodeName.toLowerCase()] || f.valHooks[this.type];
                    if (!c || !("set"in c) || c.set(this, h, "value") === b)
                        this.value = h
                }
            })
        }}), f.extend({valHooks: {option: {get: function(a) {
                    var b = a.attributes.value;
                    return!b || b.specified ? a.value : a.text
                }}, select: {get: function(a) {
                    var b, c, d, e, g = a.selectedIndex, h = [], i = a.options, j = a.type === "select-one";
                    if (g < 0)
                        return null;
                    c = j ? g : 0, d = j ? g + 1 : i.length;
                    for (; c < d; c++) {
                        e = i[c];
                        if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, "optgroup"))) {
                            b = f(e).val();
                            if (j)
                                return b;
                            h.push(b)
                        }
                    }
                    if (j && !h.length && i.length)
                        return f(i[g]).val();
                    return h
                }, set: function(a, b) {
                    var c = f.makeArray(b);
                    f(a).find("option").each(function() {
                        this.selected = f.inArray(f(this).val(), c) >= 0
                    }), c.length || (a.selectedIndex = -1);
                    return c
                }}}, attrFn: {val: !0, css: !0, html: !0, text: !0, data: !0, width: !0, height: !0, offset: !0}, attr: function(a, c, d, e) {
            var g, h, i, j = a.nodeType;
            if (!a || j === 3 || j === 8 || j === 2)
                return b;
            if (e && c in f.attrFn)
                return f(a)[c](d);
            if (!("getAttribute"in a))
                return f.prop(a, c, d);
            i = j !== 1 || !f.isXMLDoc(a), i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w));
            if (d !== b) {
                if (d === null) {
                    f.removeAttr(a, c);
                    return b
                }
                if (h && "set"in h && i && (g = h.set(a, d, c)) !== b)
                    return g;
                a.setAttribute(c, "" + d);
                return d
            }
            if (h && "get"in h && i && (g = h.get(a, c)) !== null)
                return g;
            g = a.getAttribute(c);
            return g === null ? b : g
        }, removeAttr: function(a, b) {
            var c, d, e, g, h = 0;
            if (a.nodeType === 1) {
                d = (b || "").split(p), g = d.length;
                for (; h < g; h++)
                    e = d[h].toLowerCase(), c = f.propFix[e] || e, f.attr(a, e, ""), a.removeAttribute(v ? e : c), u.test(e) && c in a && (a[c] = !1)
            }
        }, attrHooks: {type: {set: function(a, b) {
                    if (r.test(a.nodeName) && a.parentNode)
                        f.error("type property can't be changed");
                    else if (!f.support.radioValue && b === "radio" && f.nodeName(a, "input")) {
                        var c = a.value;
                        a.setAttribute("type", b), c && (a.value = c);
                        return b
                    }
                }}, value: {get: function(a, b) {
                    if (w && f.nodeName(a, "button"))
                        return w.get(a, b);
                    return b in a ? a.value : null
                }, set: function(a, b, c) {
                    if (w && f.nodeName(a, "button"))
                        return w.set(a, b, c);
                    a.value = b
                }}}, propFix: {tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable"}, prop: function(a, c, d) {
            var e, g, h, i = a.nodeType;
            if (!a || i === 3 || i === 8 || i === 2)
                return b;
            h = i !== 1 || !f.isXMLDoc(a), h && (c = f.propFix[c] || c, g = f.propHooks[c]);
            return d !== b ? g && "set"in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && "get"in g && (e = g.get(a, c)) !== null ? e : a[c]
        }, propHooks: {tabIndex: {get: function(a) {
                    var c = a.getAttributeNode("tabindex");
                    return c && c.specified ? parseInt(c.value, 10) : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b
                }}}}), f.attrHooks.tabindex = f.propHooks.tabIndex, x = {get: function(a, c) {
            var d, e = f.prop(a, c);
            return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
        }, set: function(a, b, c) {
            var d;
            b === !1 ? f.removeAttr(a, c) : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase()));
            return c
        }}, v || (y = {name: !0, id: !0}, w = f.valHooks.button = {get: function(a, c) {
            var d;
            d = a.getAttributeNode(c);
            return d && (y[c] ? d.nodeValue !== "" : d.specified) ? d.nodeValue : b
        }, set: function(a, b, d) {
            var e = a.getAttributeNode(d);
            e || (e = c.createAttribute(d), a.setAttributeNode(e));
            return e.nodeValue = b + ""
        }}, f.attrHooks.tabindex.set = w.set, f.each(["width", "height"], function(a, b) {
        f.attrHooks[b] = f.extend(f.attrHooks[b], {set: function(a, c) {
                if (c === "") {
                    a.setAttribute(b, "auto");
                    return c
                }
            }})
    }), f.attrHooks.contenteditable = {get: w.get, set: function(a, b, c) {
            b === "" && (b = "false"), w.set(a, b, c)
        }}), f.support.hrefNormalized || f.each(["href", "src", "width", "height"], function(a, c) {
        f.attrHooks[c] = f.extend(f.attrHooks[c], {get: function(a) {
                var d = a.getAttribute(c, 2);
                return d === null ? b : d
            }})
    }), f.support.style || (f.attrHooks.style = {get: function(a) {
            return a.style.cssText.toLowerCase() || b
        }, set: function(a, b) {
            return a.style.cssText = "" + b
        }}), f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {get: function(a) {
            var b = a.parentNode;
            b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
            return null
        }})), f.support.enctype || (f.propFix.enctype = "encoding"), f.support.checkOn || f.each(["radio", "checkbox"], function() {
        f.valHooks[this] = {get: function(a) {
                return a.getAttribute("value") === null ? "on" : a.value
            }}
    }), f.each(["radio", "checkbox"], function() {
        f.valHooks[this] = f.extend(f.valHooks[this], {set: function(a, b) {
                if (f.isArray(b))
                    return a.checked = f.inArray(f(a).val(), b) >= 0
            }})
    });
    var z = /\.(.*)$/, A = /^(?:textarea|input|select)$/i, B = /\./g, C = / /g, D = /[^\w\s.|`]/g, E = /^([^\.]*)?(?:\.(.+))?$/, F = /\bhover(\.\S+)?/, G = /^key/, H = /^(?:mouse|contextmenu)|click/, I = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, J = function(a) {
        var b = I.exec(a);
        b &&
                (b[1] = (b[1] || "").toLowerCase(), b[3] = b[3] && new RegExp("(?:^|\\s)" + b[3] + "(?:\\s|$)"));
        return b
    }, K = function(a, b) {
        return(!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || a.id === b[2]) && (!b[3] || b[3].test(a.className))
    }, L = function(a) {
        return f.event.special.hover ? a : a.replace(F, "mouseenter$1 mouseleave$1")
    };
    f.event = {add: function(a, c, d, e, g) {
            var h, i, j, k, l, m, n, o, p, q, r, s;
            if (!(a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a)))) {
                d.handler && (p = d, d = p.handler), d.guid || (d.guid = f.guid++), j = h.events, j || (h.events = j = {}), i = h.handle, i || (h.handle = i = function(a) {
                    return typeof f != "undefined" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b
                }, i.elem = a), c = L(c).split(" ");
                for (k = 0; k < c.length; k++) {
                    l = E.exec(c[k]) || [], m = l[1], n = (l[2] || "").split(".").sort(), s = f.event.special[m] || {}, m = (g ? s.delegateType : s.bindType) || m, s = f.event.special[m] || {}, o = f.extend({type: m, origType: l[1], data: e, handler: d, guid: d.guid, selector: g, namespace: n.join(".")}, p), g && (o.quick = J(g), !o.quick && f.expr.match.POS.test(g) && (o.isPositional = !0)), r = j[m];
                    if (!r) {
                        r = j[m] = [], r.delegateCount = 0;
                        if (!s.setup || s.setup.call(a, e, n, i) === !1)
                            a.addEventListener ? a.addEventListener(m, i, !1) : a.attachEvent && a.attachEvent("on" + m, i)
                    }
                    s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)), g ? r.splice(r.delegateCount++, 0, o) : r.push(o), f.event.global[m] = !0
                }
                a = null
            }
        }, global: {}, remove: function(a, b, c, d) {
            var e = f.hasData(a) && f._data(a), g, h, i, j, k, l, m, n, o, p, q;
            if (!!e && !!(m = e.events)) {
                b = L(b || "").split(" ");
                for (g = 0; g < b.length; g++) {
                    h = E.exec(b[g]) || [], i = h[1], j = h[2];
                    if (!i) {
                        j = j ? "." + j : "";
                        for (l in m)
                            f.event.remove(a, l + j, c, d);
                        return
                    }
                    n = f.event.special[i] || {}, i = (d ? n.delegateType : n.bindType) || i, p = m[i] || [], k = p.length, j = j ? new RegExp("(^|\\.)" + j.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
                    if (c || j || d || n.remove)
                        for (l = 0; l < p.length; l++) {
                            q = p[l];
                            if (!c || c.guid === q.guid)
                                if (!j || j.test(q.namespace))
                                    if (!d || d === q.selector || d === "**" && q.selector)
                                        p.splice(l--, 1), q.selector && p.delegateCount--, n.remove && n.remove.call(a, q)
                        }
                    else
                        p.length = 0;
                    p.length === 0 && k !== p.length && ((!n.teardown || n.teardown.call(a, j) === !1) && f.removeEvent(a, i, e.handle), delete m[i])
                }
                f.isEmptyObject(m) && (o = e.handle, o && (o.elem = null), f.removeData(a, ["events", "handle"], !0))
            }
        }, customEvent: {getData: !0, setData: !0, changeData: !0}, trigger: function(c, d, e, g) {
            if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
                var h = c.type || c, i = [], j, k, l, m, n, o, p, q, r, s;
                h.indexOf("!") >= 0 && (h = h.slice(0, -1), k = !0), h.indexOf(".") >= 0 && (i = h.split("."), h = i.shift(), i.sort());
                if ((!e || f.event.customEvent[h]) && !f.event.global[h])
                    return;
                c = typeof c == "object" ? c[f.expando] ? c : new f.Event(h, c) : new f.Event(h), c.type = h, c.isTrigger = !0, c.exclusive = k, c.namespace = i.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + i.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, o = h.indexOf(":") < 0 ? "on" + h : "", (g || !e) && c.preventDefault();
                if (!e) {
                    j = f.cache;
                    for (l in j)
                        j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0);
                    return
                }
                c.result = b, c.target || (c.target = e), d = d != null ? f.makeArray(d) : [], d.unshift(c), p = f.event.special[h] || {};
                if (p.trigger && p.trigger.apply(e, d) === !1)
                    return;
                r = [[e, p.bindType || h]];
                if (!g && !p.noBubble && !f.isWindow(e)) {
                    s = p.delegateType || h, n = null;
                    for (m = e.parentNode; m; m = m.parentNode)
                        r.push([m, s]), n = m;
                    n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a, s])
                }
                for (l = 0; l < r.length; l++) {
                    m = r[l][0], c.type = r[l][1], q = (f._data(m, "events") || {})[c.type] && f._data(m, "handle"), q && q.apply(m, d), q = o && m[o], q && f.acceptData(m) && q.apply(m, d);
                    if (c.isPropagationStopped())
                        break
                }
                c.type = h, c.isDefaultPrevented() || (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== "click" || !f.nodeName(e, "a")) && f.acceptData(e) && o && e[h] && (h !== "focus" && h !== "blur" || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n));
                return c.result
            }
        }, dispatch: function(c) {
            c = f.event.fix(c || a.event);
            var d = (f._data(this, "events") || {})[c.type] || [], e = d.delegateCount, g = [].slice.call(arguments, 0), h = !c.exclusive && !c.namespace, i = (f.event.special[c.type] || {}).handle, j = [], k, l, m, n, o, p, q, r, s, t, u;
            g[0] = c, c.delegateTarget = this;
            if (e && !c.target.disabled && (!c.button || c.type !== "click"))
                for (m = c.target; m != this; m = m.parentNode || this) {
                    o = {}, q = [];
                    for (k = 0; k < e; k++)
                        r = d[k], s = r.selector, t = o[s], r.isPositional ? t = (t || (o[s] = f(s))).index(m) >= 0 : t === b && (t = o[s] = r.quick ? K(m, r.quick) : f(m).is(s)), t && q.push(r);
                    q.length && j.push({elem: m, matches: q})
                }
            d.length > e && j.push({elem: this, matches: d.slice(e)});
            for (k = 0; k < j.length && !c.isPropagationStopped(); k++) {
                p = j[k], c.currentTarget = p.elem;
                for (l = 0; l < p.matches.length && !c.isImmediatePropagationStopped(); l++) {
                    r = p.matches[l];
                    if (h || !c.namespace && !r.namespace || c.namespace_re && c.namespace_re.test(r.namespace))
                        c.data = r.data, c.handleObj = r, n = (i || r.handler).apply(p.elem, g), n !== b && (c.result = n, n === !1 && (c.preventDefault(), c.stopPropagation()))
                }
            }
            return c.result
        }, props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split(" "), filter: function(a, b) {
                a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode);
                return a
            }}, mouseHooks: {props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "), filter: function(a, d) {
                var e, f, g, h = d.button, i = d.fromElement;
                a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0);
                return a
            }}, fix: function(a) {
            if (a[f.expando])
                return a;
            var d, e, g = a, h = f.event.fixHooks[a.type] || {}, i = h.props ? this.props.concat(h.props) : this.props;
            a = f.Event(g);
            for (d = i.length; d; )
                e = i[--d], a[e] = g[e];
            a.target || (a.target = g.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey === b && (a.metaKey = a.ctrlKey);
            return h.filter ? h.filter(a, g) : a
        }, special: {ready: {setup: f.bindReady}, focus: {delegateType: "focusin", noBubble: !0}, blur: {delegateType: "focusout", noBubble: !0}, beforeunload: {setup: function(a, b, c) {
                    f.isWindow(this) && (this.onbeforeunload = c)
                }, teardown: function(a, b) {
                    this.onbeforeunload === b && (this.onbeforeunload = null)
                }}}, simulate: function(a, b, c, d) {
            var e = f.extend(new f.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
            d ? f.event.trigger(e, null, b) : f.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
        }}, f.event.handle = f.event.dispatch, f.removeEvent = c.removeEventListener ? function(a, b, c) {
        a.removeEventListener && a.removeEventListener(b, c, !1)
    } : function(a, b, c) {
        a.detachEvent && a.detachEvent("on" + b, c)
    }, f.Event = function(a, b) {
        if (!(this instanceof f.Event))
            return new f.Event(a, b);
        a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? N : M) : this.type = a, b && f.extend(this, b), this.timeStamp = a && a.timeStamp || f.now(), this[f.expando] = !0
    }, f.Event.prototype = {preventDefault: function() {
            this.isDefaultPrevented = N;
            var a = this.originalEvent;
            !a || (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
        }, stopPropagation: function() {
            this.isPropagationStopped = N;
            var a = this.originalEvent;
            !a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
        }, stopImmediatePropagation: function() {
            this.isImmediatePropagationStopped = N, this.stopPropagation()
        }, isDefaultPrevented: M, isPropagationStopped: M, isImmediatePropagationStopped: M}, f.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function(a, b) {
        f.event.special[a] = f.event.special[b] = {delegateType: b, bindType: b, handle: function(a) {
                var b = this, c = a.relatedTarget, d = a.handleObj, e = d.selector, g, h;
                if (!c || d.origType === a.type || c !== b && !f.contains(b, c))
                    g = a.type, a.type = d.origType, h = d.handler.apply(this, arguments), a.type = g;
                return h
            }}
    }), f.support.submitBubbles || (f.event.special.submit = {setup: function() {
            if (f.nodeName(this, "form"))
                return!1;
            f.event.add(this, "click._submit keypress._submit", function(a) {
                var c = a.target, d = f.nodeName(c, "input") || f.nodeName(c, "button") ? c.form : b;
                d && !d._submit_attached && (f.event.add(d, "submit._submit", function(a) {
                    this.parentNode && f.event.simulate("submit", this.parentNode, a, !0)
                }), d._submit_attached = !0)
            })
        }, teardown: function() {
            if (f.nodeName(this, "form"))
                return!1;
            f.event.remove(this, "._submit")
        }}), f.support.changeBubbles || (f.event.special.change = {setup: function() {
            if (A.test(this.nodeName)) {
                if (this.type === "checkbox" || this.type === "radio")
                    f.event.add(this, "propertychange._change", function(a) {
                        a.originalEvent.propertyName === "checked" && (this._just_changed = !0)
                    }), f.event.add(this, "click._change", function(a) {
                        this._just_changed && (this._just_changed = !1, f.event.simulate("change", this, a, !0))
                    });
                return!1
            }
            f.event.add(this, "beforeactivate._change", function(a) {
                var b = a.target;
                A.test(b.nodeName) && !b._change_attached && (f.event.add(b, "change._change", function(a) {
                    this.parentNode && !a.isSimulated && f.event.simulate("change", this.parentNode, a, !0)
                }), b._change_attached = !0)
            })
        }, handle: function(a) {
            var b = a.target;
            if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox")
                return a.handleObj.handler.apply(this, arguments)
        }, teardown: function() {
            f.event.remove(this, "._change");
            return A.test(this.nodeName)
        }}), f.support.focusinBubbles || f.each({focus: "focusin", blur: "focusout"}, function(a, b) {
        var d = 0, e = function(a) {
            f.event.simulate(b, a.target, f.event.fix(a), !0)
        };
        f.event.special[b] = {setup: function() {
                d++ === 0 && c.addEventListener(a, e, !0)
            }, teardown: function() {
                --d === 0 && c.removeEventListener(a, e, !0)
            }}
    }), f.fn.extend({on: function(a, c, d, e, g) {
            var h, i;
            if (typeof a == "object") {
                typeof c != "string" && (d = c, c = b);
                for (i in a)
                    this.on(i, c, d, a[i], g);
                return this
            }
            d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b));
            if (e === !1)
                e = M;
            else if (!e)
                return this;
            g === 1 && (h = e, e = function(a) {
                f().off(a);
                return h.apply(this, arguments)
            }, e.guid = h.guid || (h.guid = f.guid++));
            return this.each(function() {
                f.event.add(this, a, e, d, c)
            })
        }, one: function(a, b, c, d) {
            return this.on.call(this, a, b, c, d, 1)
        }, off: function(a, c, d) {
            if (a && a.preventDefault && a.handleObj) {
                var e = a.handleObj;
                f(a.delegateTarget).off(e.namespace ? e.type + "." + e.namespace : e.type, e.selector, e.handler);
                return this
            }
            if (typeof a == "object") {
                for (var g in a)
                    this.off(g, c, a[g]);
                return this
            }
            if (c === !1 || typeof c == "function")
                d = c, c = b;
            d === !1 && (d = M);
            return this.each(function() {
                f.event.remove(this, a, d, c)
            })
        }, bind: function(a, b, c) {
            return this.on(a, null, b, c)
        }, unbind: function(a, b) {
            return this.off(a, null, b)
        }, live: function(a, b, c) {
            f(this.context).on(a, this.selector, b, c);
            return this
        }, die: function(a, b) {
            f(this.context).off(a, this.selector || "**", b);
            return this
        }, delegate: function(a, b, c, d) {
            return this.on(b, a, c, d)
        }, undelegate: function(a, b, c) {
            return arguments.length == 1 ? this.off(a, "**") : this.off(b, a, c)
        }, trigger: function(a, b) {
            return this.each(function() {
                f.event.trigger(a, b, this)
            })
        }, triggerHandler: function(a, b) {
            if (this[0])
                return f.event.trigger(a, b, this[0], !0)
        }, toggle: function(a) {
            var b = arguments, c = a.guid || f.guid++, d = 0, e = function(c) {
                var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
                f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault();
                return b[e].apply(this, arguments) || !1
            };
            e.guid = c;
            while (d < b.length)
                b[d++].guid = c;
            return this.click(e)
        }, hover: function(a, b) {
            return this.mouseenter(a).mouseleave(b || a)
        }}), f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(a, b) {
        f.fn[b] = function(a, c) {
            c == null && (c = a, a = null);
            return arguments.length > 0 ? this.bind(b, a, c) : this.trigger(b)
        }, f.attrFn && (f.attrFn[b] = !0), G.test(b) && (f.event.fixHooks[b] = f.event.keyHooks), H.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
    }), function() {
        function x(a, b, c, e, f, g) {
            for (var h = 0, i = e.length; h < i; h++) {
                var j = e[h];
                if (j) {
                    var k = !1;
                    j = j[a];
                    while (j) {
                        if (j[d] === c) {
                            k = e[j.sizset];
                            break
                        }
                        if (j.nodeType === 1) {
                            g || (j[d] = c, j.sizset = h);
                            if (typeof b != "string") {
                                if (j === b) {
                                    k = !0;
                                    break
                                }
                            } else if (m.filter(b, [j]).length > 0) {
                                k = j;
                                break
                            }
                        }
                        j = j[a]
                    }
                    e[h] = k
                }
            }
        }
        function w(a, b, c, e, f, g) {
            for (var h = 0, i = e.length; h < i; h++) {
                var j = e[h];
                if (j) {
                    var k = !1;
                    j = j[a];
                    while (j) {
                        if (j[d] === c) {
                            k = e[j.sizset];
                            break
                        }
                        j.nodeType === 1 && !g && (j[d] = c, j.sizset = h);
                        if (j.nodeName.toLowerCase() === b) {
                            k = j;
                            break
                        }
                        j = j[a]
                    }
                    e[h] = k
                }
            }
        }
        var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, d = "sizcache" + (Math.random() + "").replace(".", ""), e = 0, g = Object.prototype.toString, h = !1, i = !0, j = /\\/g, k = /\r\n/g, l = /\W/;
        [0, 0].sort(function() {
            i = !1;
            return 0
        });
        var m = function(b, d, e, f) {
            e = e || [], d = d || c;
            var h = d;
            if (d.nodeType !== 1 && d.nodeType !== 9)
                return[];
            if (!b || typeof b != "string")
                return e;
            var i, j, k, l, n, q, r, t, u = !0, v = m.isXML(d), w = [], x = b;
            do {
                a.exec(""), i = a.exec(x);
                if (i) {
                    x = i[3], w.push(i[1]);
                    if (i[2]) {
                        l = i[3];
                        break
                    }
                }
            } while (i);
            if (w.length > 1 && p.exec(b))
                if (w.length === 2 && o.relative[w[0]])
                    j = y(w[0] + w[1], d, f);
                else {
                    j = o.relative[w[0]] ? [d] : m(w.shift(), d);
                    while (w.length)
                        b = w.shift(), o.relative[b] && (b += w.shift()), j = y(b, j, f)
                }
            else {
                !f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set)[0] : n.set[0]);
                if (d) {
                    n = f ? {expr: w.pop(), set: s(f)} : m.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), j = n.expr ? m.filter(n.expr, n.set) : n.set, w.length > 0 ? k = s(j) : u = !1;
                    while (w.length)
                        q = w.pop(), r = q, o.relative[q] ? r = w.pop() : q = "", r == null && (r = d), o.relative[q](k, r, v)
                } else
                    k = w = []
            }
            k || (k = j), k || m.error(q || b);
            if (g.call(k) === "[object Array]")
                if (!u)
                    e.push.apply(e, k);
                else if (d && d.nodeType === 1)
                    for (t = 0; k[t] != null; t++)
                        k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]);
                else
                    for (t = 0; k[t] != null; t++)
                        k[t] && k[t].nodeType === 1 && e.push(j[t]);
            else
                s(k, e);
            l && (m(l, h, e, f), m.uniqueSort(e));
            return e
        };
        m.uniqueSort = function(a) {
            if (u) {
                h = i, a.sort(u);
                if (h)
                    for (var b = 1; b < a.length; b++)
                        a[b] === a[b - 1] && a.splice(b--, 1)
            }
            return a
        }, m.matches = function(a, b) {
            return m(a, null, null, b)
        }, m.matchesSelector = function(a, b) {
            return m(b, null, null, [a]).length > 0
        }, m.find = function(a, b, c) {
            var d, e, f, g, h, i;
            if (!a)
                return[];
            for (e = 0, f = o.order.length; e < f; e++) {
                h = o.order[e];
                if (g = o.leftMatch[h].exec(a)) {
                    i = g[1], g.splice(1, 1);
                    if (i.substr(i.length - 1) !== "\\") {
                        g[1] = (g[1] || "").replace(j, ""), d = o.find[h](g, b, c);
                        if (d != null) {
                            a = a.replace(o.match[h], "");
                            break
                        }
                    }
                }
            }
            d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []);
            return{set: d, expr: a}
        }, m.filter = function(a, c, d, e) {
            var f, g, h, i, j, k, l, n, p, q = a, r = [], s = c, t = c && c[0] && m.isXML(c[0]);
            while (a && c.length) {
                for (h in o.filter)
                    if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
                        k = o.filter[h], l = f[1], g = !1, f.splice(1, 1);
                        if (l.substr(l.length - 1) === "\\")
                            continue;
                        s === r && (r = []);
                        if (o.preFilter[h]) {
                            f = o.preFilter[h](f, s, d, r, e, t);
                            if (!f)
                                g = i = !0;
                            else if (f === !0)
                                continue
                        }
                        if (f)
                            for (n = 0; (j = s[n]) != null; n++)
                                j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0));
                        if (i !== b) {
                            d || (s = r), a = a.replace(o.match[h], "");
                            if (!g)
                                return[];
                            break
                        }
                    }
                if (a === q)
                    if (g == null)
                        m.error(a);
                    else
                        break;
                q = a
            }
            return s
        }, m.error = function(a) {
            throw"Syntax error, unrecognized expression: " + a
        };
        var n = m.getText = function(a) {
            var b, c, d = a.nodeType, e = "";
            if (d) {
                if (d === 1) {
                    if (typeof a.textContent == "string")
                        return a.textContent;
                    if (typeof a.innerText == "string")
                        return a.innerText.replace(k, "");
                    for (a = a.firstChild; a; a = a.nextSibling)
                        e += n(a)
                } else if (d === 3 || d === 4)
                    return a.nodeValue
            } else
                for (b = 0; c = a[b]; b++)
                    c.nodeType !== 8 && (e += n(c));
            return e
        }, o = m.selectors = {order: ["ID", "NAME", "TAG"], match: {ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/}, leftMatch: {}, attrMap: {"class": "className", "for": "htmlFor"}, attrHandle: {href: function(a) {
                    return a.getAttribute("href")
                }, type: function(a) {
                    return a.getAttribute("type")
                }}, relative: {"+": function(a, b) {
                    var c = typeof b == "string", d = c && !l.test(b), e = c && !d;
                    d && (b = b.toLowerCase());
                    for (var f = 0, g = a.length, h; f < g; f++)
                        if (h = a[f]) {
                            while ((h = h.previousSibling) && h.nodeType !== 1)
                                ;
                            a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
                        }
                    e && m.filter(b, a, !0)
                }, ">": function(a, b) {
                    var c, d = typeof b == "string", e = 0, f = a.length;
                    if (d && !l.test(b)) {
                        b = b.toLowerCase();
                        for (; e < f; e++) {
                            c = a[e];
                            if (c) {
                                var g = c.parentNode;
                                a[e] = g.nodeName.toLowerCase() === b ? g : !1
                            }
                        }
                    } else {
                        for (; e < f; e++)
                            c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
                        d && m.filter(b, a, !0)
                    }
                }, "": function(a, b, c) {
                    var d, f = e++, g = x;
                    typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("parentNode", b, f, a, d, c)
                }, "~": function(a, b, c) {
                    var d, f = e++, g = x;
                    typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("previousSibling", b, f, a, d, c)
                }}, find: {ID: function(a, b, c) {
                    if (typeof b.getElementById != "undefined" && !c) {
                        var d = b.getElementById(a[1]);
                        return d && d.parentNode ? [d] : []
                    }
                }, NAME: function(a, b) {
                    if (typeof b.getElementsByName != "undefined") {
                        var c = [], d = b.getElementsByName(a[1]);
                        for (var e = 0, f = d.length; e < f; e++)
                            d[e].getAttribute("name") === a[1] && c.push(d[e]);
                        return c.length === 0 ? null : c
                    }
                }, TAG: function(a, b) {
                    if (typeof b.getElementsByTagName != "undefined")
                        return b.getElementsByTagName(a[1])
                }}, preFilter: {CLASS: function(a, b, c, d, e, f) {
                    a = " " + a[1].replace(j, "") + " ";
                    if (f)
                        return a;
                    for (var g = 0, h; (h = b[g]) != null; g++)
                        h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1));
                    return!1
                }, ID: function(a) {
                    return a[1].replace(j, "")
                }, TAG: function(a, b) {
                    return a[1].replace(j, "").toLowerCase()
                }, CHILD: function(a) {
                    if (a[1] === "nth") {
                        a[2] || m.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
                        var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
                        a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
                    } else
                        a[2] && m.error(a[0]);
                    a[0] = e++;
                    return a
                }, ATTR: function(a, b, c, d, e, f) {
                    var g = a[1] = a[1].replace(j, "");
                    !f && o.attrMap[g] && (a[1] = o.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(j, ""), a[2] === "~=" && (a[4] = " " + a[4] + " ");
                    return a
                }, PSEUDO: function(b, c, d, e, f) {
                    if (b[1] === "not")
                        if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3]))
                            b[3] = m(b[3], null, null, c);
                        else {
                            var g = m.filter(b[3], c, d, !0 ^ f);
                            d || e.push.apply(e, g);
                            return!1
                        }
                    else if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0]))
                        return!0;
                    return b
                }, POS: function(a) {
                    a.unshift(!0);
                    return a
                }}, filters: {enabled: function(a) {
                    return a.disabled === !1 && a.type !== "hidden"
                }, disabled: function(a) {
                    return a.disabled === !0
                }, checked: function(a) {
                    return a.checked === !0
                }, selected: function(a) {
                    a.parentNode && a.parentNode.selectedIndex;
                    return a.selected === !0
                }, parent: function(a) {
                    return!!a.firstChild
                }, empty: function(a) {
                    return!a.firstChild
                }, has: function(a, b, c) {
                    return!!m(c[3], a).length
                }, header: function(a) {
                    return/h\d/i.test(a.nodeName)
                }, text: function(a) {
                    var b = a.getAttribute("type"), c = a.type;
                    return a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
                }, radio: function(a) {
                    return a.nodeName.toLowerCase() === "input" && "radio" === a.type
                }, checkbox: function(a) {
                    return a.nodeName.toLowerCase() === "input" && "checkbox" === a.type
                }, file: function(a) {
                    return a.nodeName.toLowerCase() === "input" && "file" === a.type
                }, password: function(a) {
                    return a.nodeName.toLowerCase() === "input" && "password" === a.type
                }, submit: function(a) {
                    var b = a.nodeName.toLowerCase();
                    return(b === "input" || b === "button") && "submit" === a.type
                }, image: function(a) {
                    return a.nodeName.toLowerCase() === "input" && "image" === a.type
                }, reset: function(a) {
                    var b = a.nodeName.toLowerCase();
                    return(b === "input" || b === "button") && "reset" === a.type
                }, button: function(a) {
                    var b = a.nodeName.toLowerCase();
                    return b === "input" && "button" === a.type || b === "button"
                }, input: function(a) {
                    return/input|select|textarea|button/i.test(a.nodeName)
                }, focus: function(a) {
                    return a === a.ownerDocument.activeElement
                }}, setFilters: {first: function(a, b) {
                    return b === 0
                }, last: function(a, b, c, d) {
                    return b === d.length - 1
                }, even: function(a, b) {
                    return b % 2 === 0
                }, odd: function(a, b) {
                    return b % 2 === 1
                }, lt: function(a, b, c) {
                    return b < c[3] - 0
                }, gt: function(a, b, c) {
                    return b > c[3] - 0
                }, nth: function(a, b, c) {
                    return c[3] - 0 === b
                }, eq: function(a, b, c) {
                    return c[3] - 0 === b
                }}, filter: {PSEUDO: function(a, b, c, d) {
                    var e = b[1], f = o.filters[e];
                    if (f)
                        return f(a, c, b, d);
                    if (e === "contains")
                        return(a.textContent || a.innerText || n([a]) || "").indexOf(b[3]) >= 0;
                    if (e === "not") {
                        var g = b[3];
                        for (var h = 0, i = g.length; h < i; h++)
                            if (g[h] === a)
                                return!1;
                        return!0
                    }
                    m.error(e)
                }, CHILD: function(a, b) {
                    var c, e, f, g, h, i, j, k = b[1], l = a;
                    switch (k) {
                        case"only":
                        case"first":
                            while (l = l.previousSibling)
                                if (l.nodeType === 1)
                                    return!1;
                            if (k === "first")
                                return!0;
                            l = a;
                        case"last":
                            while (l = l.nextSibling)
                                if (l.nodeType === 1)
                                    return!1;
                            return!0;
                        case"nth":
                            c = b[2], e = b[3];
                            if (c === 1 && e === 0)
                                return!0;
                            f = b[0], g = a.parentNode;
                            if (g && (g[d] !== f || !a.nodeIndex)) {
                                i = 0;
                                for (l = g.firstChild; l; l = l.nextSibling)
                                    l.nodeType === 1 && (l.nodeIndex = ++i);
                                g[d] = f
                            }
                            j = a.nodeIndex - e;
                            return c === 0 ? j === 0 : j % c === 0 && j / c >= 0
                        }
                }, ID: function(a, b) {
                    return a.nodeType === 1 && a.getAttribute("id") === b
                }, TAG: function(a, b) {
                    return b === "*" && a.nodeType === 1 || !!a.nodeName && a.nodeName.toLowerCase() === b
                }, CLASS: function(a, b) {
                    return(" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
                }, ATTR: function(a, b) {
                    var c = b[1], d = m.attr ? m.attr(a, c) : o.attrHandle[c] ? o.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c), e = d + "", f = b[2], g = b[4];
                    return d == null ? f === "!=" : !f && m.attr ? d != null : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
                }, POS: function(a, b, c, d) {
                    var e = b[2], f = o.setFilters[e];
                    if (f)
                        return f(a, c, b, d)
                }}}, p = o.match.POS, q = function(a, b) {
            return"\\" + (b - 0 + 1)
        };
        for (var r in o.match)
            o.match[r] = new RegExp(o.match[r].source + /(?![^\[]*\])(?![^\(]*\))/.source), o.leftMatch[r] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[r].source.replace(/\\(\d+)/g, q));
        var s = function(a, b) {
            a = Array.prototype.slice.call(a, 0);
            if (b) {
                b.push.apply(b, a);
                return b
            }
            return a
        };
        try {
            Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType
        } catch (t) {
            s = function(a, b) {
                var c = 0, d = b || [];
                if (g.call(a) === "[object Array]")
                    Array.prototype.push.apply(d, a);
                else if (typeof a.length == "number")
                    for (var e = a.length; c < e; c++)
                        d.push(a[c]);
                else
                    for (; a[c]; c++)
                        d.push(a[c]);
                return d
            }
        }
        var u, v;
        c.documentElement.compareDocumentPosition ? u = function(a, b) {
            if (a === b) {
                h = !0;
                return 0
            }
            if (!a.compareDocumentPosition || !b.compareDocumentPosition)
                return a.compareDocumentPosition ? -1 : 1;
            return a.compareDocumentPosition(b) & 4 ? -1 : 1
        } : (u = function(a, b) {
            if (a === b) {
                h = !0;
                return 0
            }
            if (a.sourceIndex && b.sourceIndex)
                return a.sourceIndex - b.sourceIndex;
            var c, d, e = [], f = [], g = a.parentNode, i = b.parentNode, j = g;
            if (g === i)
                return v(a, b);
            if (!g)
                return-1;
            if (!i)
                return 1;
            while (j)
                e.unshift(j), j = j.parentNode;
            j = i;
            while (j)
                f.unshift(j), j = j.parentNode;
            c = e.length, d = f.length;
            for (var k = 0; k < c && k < d; k++)
                if (e[k] !== f[k])
                    return v(e[k], f[k]);
            return k === c ? v(a, f[k], -1) : v(e[k], b, 1)
        }, v = function(a, b, c) {
            if (a === b)
                return c;
            var d = a.nextSibling;
            while (d) {
                if (d === b)
                    return-1;
                d = d.nextSibling
            }
            return 1
        }), function() {
            var a = c.createElement("div"), d = "script" + (new Date).getTime(), e = c.documentElement;
            a.innerHTML = "<a name='" + d + "'/>", e.insertBefore(a, e.firstChild), c.getElementById(d) && (o.find.ID = function(a, c, d) {
                if (typeof c.getElementById != "undefined" && !d) {
                    var e = c.getElementById(a[1]);
                    return e ? e.id === a[1] || typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : []
                }
            }, o.filter.ID = function(a, b) {
                var c = typeof a.getAttributeNode != "undefined" && a.getAttributeNode("id");
                return a.nodeType === 1 && c && c.nodeValue === b
            }), e.removeChild(a), e = a = null
        }(), function() {
            var a = c.createElement("div");
            a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (o.find.TAG = function(a, b) {
                var c = b.getElementsByTagName(a[1]);
                if (a[1] === "*") {
                    var d = [];
                    for (var e = 0; c[e]; e++)
                        c[e].nodeType === 1 && d.push(c[e]);
                    c = d
                }
                return c
            }), a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (o.attrHandle.href = function(a) {
                return a.getAttribute("href", 2)
            }), a = null
        }(), c.querySelectorAll && function() {
            var a = m, b = c.createElement("div"), d = "__sizzle__";
            b.innerHTML = "<p class='TEST'></p>";
            if (!b.querySelectorAll || b.querySelectorAll(".TEST").length !== 0) {
                m = function(b, e, f, g) {
                    e = e || c;
                    if (!g && !m.isXML(e)) {
                        var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
                        if (h && (e.nodeType === 1 || e.nodeType === 9)) {
                            if (h[1])
                                return s(e.getElementsByTagName(b), f);
                            if (h[2] && o.find.CLASS && e.getElementsByClassName)
                                return s(e.getElementsByClassName(h[2]), f)
                        }
                        if (e.nodeType === 9) {
                            if (b === "body" && e.body)
                                return s([e.body], f);
                            if (h && h[3]) {
                                var i = e.getElementById(h[3]);
                                if (!i || !i.parentNode)
                                    return s([], f);
                                if (i.id === h[3])
                                    return s([i], f)
                            }
                            try {
                                return s(e.querySelectorAll(b), f)
                            } catch (j) {
                            }
                        } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
                            var k = e, l = e.getAttribute("id"), n = l || d, p = e.parentNode, q = /^\s*[+~]/.test(b);
                            l ? n = n.replace(/'/g, "\\$&") : e.setAttribute("id", n), q && p && (e = e.parentNode);
                            try {
                                if (!q || p)
                                    return s(e.querySelectorAll("[id='" + n + "'] " + b), f)
                            } catch (r) {
                            } finally {
                                l || k.removeAttribute("id")
                            }
                        }
                    }
                    return a(b, e, f, g)
                };
                for (var e in a)
                    m[e] = a[e];
                b = null
            }
        }(), function() {
            var a = c.documentElement, b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
            if (b) {
                var d = !b.call(c.createElement("div"), "div"), e = !1;
                try {
                    b.call(c.documentElement, "[test!='']:sizzle")
                } catch (f) {
                    e = !0
                }
                m.matchesSelector = function(a, c) {
                    c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
                    if (!m.isXML(a))
                        try {
                            if (e || !o.match.PSEUDO.test(c) && !/!=/.test(c)) {
                                var f = b.call(a, c);
                                if (f || !d || a.document && a.document.nodeType !== 11)
                                    return f
                            }
                        } catch (g) {
                        }
                    return m(c, null, null, [a]).length > 0
                }
            }
        }(), function() {
            var a = c.createElement("div");
            a.innerHTML = "<div class='test e'></div><div class='test'></div>";
            if (!!a.getElementsByClassName && a.getElementsByClassName("e").length !== 0) {
                a.lastChild.className = "e";
                if (a.getElementsByClassName("e").length === 1)
                    return;
                o.order.splice(1, 0, "CLASS"), o.find.CLASS = function(a, b, c) {
                    if (typeof b.getElementsByClassName != "undefined" && !c)
                        return b.getElementsByClassName(a[1])
                }, a = null
            }
        }(), c.documentElement.contains ? m.contains = function(a, b) {
            return a !== b && (a.contains ? a.contains(b) : !0)
        } : c.documentElement.compareDocumentPosition ? m.contains = function(a, b) {
            return!!(a.compareDocumentPosition(b) & 16)
        } : m.contains = function() {
            return!1
        }, m.isXML = function(a) {
            var b = (a ? a.ownerDocument || a : 0).documentElement;
            return b ? b.nodeName !== "HTML" : !1
        };
        var y = function(a, b, c) {
            var d, e = [], f = "", g = b.nodeType ? [b] : b;
            while (d = o.match.PSEUDO.exec(a))
                f += d[0], a = a.replace(o.match.PSEUDO, "");
            a = o.relative[a] ? a + "*" : a;
            for (var h = 0, i = g.length; h < i; h++)
                m(a, g[h], e, c);
            return m.filter(f, e)
        };
        m.attr = f.attr, m.selectors.attrMap = {}, f.find = m, f.expr = m.selectors, f.expr[":"] = f.expr.filters, f.unique = m.uniqueSort, f.text = m.getText, f.isXMLDoc = m.isXML, f.contains = m.contains
    }();
    var O = /Until$/, P = /^(?:parents|prevUntil|prevAll)/, Q = /,/, R = /^.[^:#\[\.,]*$/, S = Array.prototype.slice, T = f.expr.match.POS, U = {children: !0, contents: !0, next: !0, prev: !0};
    f.fn.extend({find: function(a) {
            var b = this, c, d;
            if (typeof a != "string")
                return f(a).filter(function() {
                    for (c = 0, d = b.length; c < d; c++)
                        if (f.contains(b[c], this))
                            return!0
                });
            var e = this.pushStack("", "find", a), g, h, i;
            for (c = 0, d = this.length; c < d; c++) {
                g = e.length, f.find(a, this[c], e);
                if (c > 0)
                    for (h = g; h < e.length; h++)
                        for (i = 0; i < g; i++)
                            if (e[i] === e[h]) {
                                e.splice(h--, 1);
                                break
                            }
            }
            return e
        }, has: function(a) {
            var b = f(a);
            return this.filter(function() {
                for (var a = 0, c = b.length; a < c; a++)
                    if (f.contains(this, b[a]))
                        return!0
            })
        }, not: function(a) {
            return this.pushStack(W(this, a, !1), "not", a)
        }, filter: function(a) {
            return this.pushStack(W(this, a, !0), "filter", a)
        }, is: function(a) {
            return!!a && (typeof a == "string" ? T.test(a) ? f(a, this.context).index(this[0]) >= 0 : f.filter(a, this).length > 0 : this.filter(a).length > 0)
        }, closest: function(a, b) {
            var c = [], d, e, g = this[0];
            if (f.isArray(a)) {
                var h = 1;
                while (g && g.ownerDocument && g !== b) {
                    for (d = 0; d < a.length; d++)
                        f(g).is(a[d]) && c.push({selector: a[d], elem: g, level: h});
                    g = g.parentNode, h++
                }
                return c
            }
            var i = T.test(a) || typeof a != "string" ? f(a, b || this.context) : 0;
            for (d = 0, e = this.length; d < e; d++) {
                g = this[d];
                while (g) {
                    if (i ? i.index(g) > -1 : f.find.matchesSelector(g, a)) {
                        c.push(g);
                        break
                    }
                    g = g.parentNode;
                    if (!g || !g.ownerDocument || g === b || g.nodeType === 11)
                        break
                }
            }
            c = c.length > 1 ? f.unique(c) : c;
            return this.pushStack(c, "closest", a)
        }, index: function(a) {
            if (!a)
                return this[0] && this[0].parentNode ? this.prevAll().length : -1;
            if (typeof a == "string")
                return f.inArray(this[0], f(a));
            return f.inArray(a.jquery ? a[0] : a, this)
        }, add: function(a, b) {
            var c = typeof a == "string" ? f(a, b) : f.makeArray(a && a.nodeType ? [a] : a), d = f.merge(this.get(), c);
            return this.pushStack(V(c[0]) || V(d[0]) ? d : f.unique(d))
        }, andSelf: function() {
            return this.add(this.prevObject)
        }}), f.each({parent: function(a) {
            var b = a.parentNode;
            return b && b.nodeType !== 11 ? b : null
        }, parents: function(a) {
            return f.dir(a, "parentNode")
        }, parentsUntil: function(a, b, c) {
            return f.dir(a, "parentNode", c)
        }, next: function(a) {
            return f.nth(a, 2, "nextSibling")
        }, prev: function(a) {
            return f.nth(a, 2, "previousSibling")
        }, nextAll: function(a) {
            return f.dir(a, "nextSibling")
        }, prevAll: function(a) {
            return f.dir(a, "previousSibling")
        }, nextUntil: function(a, b, c) {
            return f.dir(a, "nextSibling", c)
        }, prevUntil: function(a, b, c) {
            return f.dir(a, "previousSibling", c)
        }, siblings: function(a) {
            return f.sibling(a.parentNode.firstChild, a)
        }, children: function(a) {
            return f.sibling(a.firstChild)
        }, contents: function(a) {
            return f.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
        }}, function(a, b) {
        f.fn[a] = function(c, d) {
            var e = f.map(this, b, c), g = S.call(arguments);
            O.test(a) || (d = c), d && typeof d == "string" && (e = f.filter(d, e)), e = this.length > 1 && !U[a] ? f.unique(e) : e, (this.length > 1 || Q.test(d)) && P.test(a) && (e = e.reverse());
            return this.pushStack(e, a, g.join(","))
        }
    }), f.extend({filter: function(a, b, c) {
            c && (a = ":not(" + a + ")");
            return b.length === 1 ? f.find.matchesSelector(b[0], a) ? [b[0]] : [] : f.find.matches(a, b)
        }, dir: function(a, c, d) {
            var e = [], g = a[c];
            while (g && g.nodeType !== 9 && (d === b || g.nodeType !== 1 || !f(g).is(d)))
                g.nodeType === 1 && e.push(g), g = g[c];
            return e
        }, nth: function(a, b, c, d) {
            b = b || 1;
            var e = 0;
            for (; a; a = a[c])
                if (a.nodeType === 1 && ++e === b)
                    break;
            return a
        }, sibling: function(a, b) {
            var c = [];
            for (; a; a = a.nextSibling)
                a.nodeType === 1 && a !== b && c.push(a);
            return c
        }});
    var Y = "abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video", Z = / jQuery\d+="(?:\d+|null)"/g, $ = /^\s+/, _ = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, ba = /<([\w:]+)/, bb = /<tbody/i, bc = /<|&#?\w+;/, bd = /<(?:script|style)/i, be = /<(?:script|object|embed|option|style)/i, bf = new RegExp("<(?:" + Y.replace(" ", "|") + ")", "i"), bg = /checked\s*(?:[^=]|=\s*.checked.)/i, bh = /\/(java|ecma)script/i, bi = /^\s*<!(?:\[CDATA\[|\-\-)/, bj = {option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], area: [1, "<map>", "</map>"], _default: [0, "", ""]}, bk = X(c);
    bj.optgroup = bj.option, bj.tbody = bj.tfoot = bj.colgroup = bj.caption = bj.thead, bj.th = bj.td, f.support.htmlSerialize || (bj._default = [1, "div<div>", "</div>"]), f.fn.extend({text: function(a) {
            if (f.isFunction(a))
                return this.each(function(b) {
                    var c = f(this);
                    c.text(a.call(this, b, c.text()))
                });
            if (typeof a != "object" && a !== b)
                return this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a));
            return f.text(this)
        }, wrapAll: function(a) {
            if (f.isFunction(a))
                return this.each(function(b) {
                    f(this).wrapAll(a.call(this, b))
                });
            if (this[0]) {
                var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && b.insertBefore(this[0]), b.map(function() {
                    var a = this;
                    while (a.firstChild && a.firstChild.nodeType === 1)
                        a = a.firstChild;
                    return a
                }).append(this)
            }
            return this
        }, wrapInner: function(a) {
            if (f.isFunction(a))
                return this.each(function(b) {
                    f(this).wrapInner(a.call(this, b))
                });
            return this.each(function() {
                var b = f(this), c = b.contents();
                c.length ? c.wrapAll(a) : b.append(a)
            })
        }, wrap: function(a) {
            return this.each(function() {
                f(this).wrapAll(a)
            })
        }, unwrap: function() {
            return this.parent().each(function() {
                f.nodeName(this, "body") || f(this).replaceWith(this.childNodes)
            }).end()
        }, append: function() {
            return this.domManip(arguments, !0, function(a) {
                this.nodeType === 1 && this.appendChild(a)
            })
        }, prepend: function() {
            return this.domManip(arguments, !0, function(a) {
                this.nodeType === 1 && this.insertBefore(a, this.firstChild)
            })
        }, before: function() {
            if (this[0] && this[0].parentNode)
                return this.domManip(arguments, !1, function(a) {
                    this.parentNode.insertBefore(a, this)
                });
            if (arguments.length) {
                var a = f(arguments[0]);
                a.push.apply(a, this.toArray());
                return this.pushStack(a, "before", arguments)
            }
        }, after: function() {
            if (this[0] && this[0].parentNode)
                return this.domManip(arguments, !1, function(a) {
                    this.parentNode.insertBefore(a, this.nextSibling)
                });
            if (arguments.length) {
                var a = this.pushStack(this, "after"
                        , arguments);
                a.push.apply(a, f(arguments[0]).toArray());
                return a
            }
        }, remove: function(a, b) {
            for (var c = 0, d; (d = this[c]) != null; c++)
                if (!a || f.filter(a, [d]).length)
                    !b && d.nodeType === 1 && (f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])), d.parentNode && d.parentNode.removeChild(d);
            return this
        }, empty: function() {
            for (var a = 0, b; (b = this[a]) != null; a++) {
                b.nodeType === 1 && f.cleanData(b.getElementsByTagName("*"));
                while (b.firstChild)
                    b.removeChild(b.firstChild)
            }
            return this
        }, clone: function(a, b) {
            a = a == null ? !1 : a, b = b == null ? a : b;
            return this.map(function() {
                return f.clone(this, a, b)
            })
        }, html: function(a) {
            if (a === b)
                return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(Z, "") : null;
            if (typeof a == "string" && !bd.test(a) && (f.support.leadingWhitespace || !$.test(a)) && !bj[(ba.exec(a) || ["", ""])[1].toLowerCase()]) {
                a = a.replace(_, "<$1></$2>");
                try {
                    for (var c = 0, d = this.length; c < d; c++)
                        this[c].nodeType === 1 && (f.cleanData(this[c].getElementsByTagName("*")), this[c].innerHTML = a)
                } catch (e) {
                    this.empty().append(a)
                }
            } else
                f.isFunction(a) ? this.each(function(b) {
                    var c = f(this);
                    c.html(a.call(this, b, c.html()))
                }) : this.empty().append(a);
            return this
        }, replaceWith: function(a) {
            if (this[0] && this[0].parentNode) {
                if (f.isFunction(a))
                    return this.each(function(b) {
                        var c = f(this), d = c.html();
                        c.replaceWith(a.call(this, b, d))
                    });
                typeof a != "string" && (a = f(a).detach());
                return this.each(function() {
                    var b = this.nextSibling, c = this.parentNode;
                    f(this).remove(), b ? f(b).before(a) : f(c).append(a)
                })
            }
            return this.length ? this.pushStack(f(f.isFunction(a) ? a() : a), "replaceWith", a) : this
        }, detach: function(a) {
            return this.remove(a, !0)
        }, domManip: function(a, c, d) {
            var e, g, h, i, j = a[0], k = [];
            if (!f.support.checkClone && arguments.length === 3 && typeof j == "string" && bg.test(j))
                return this.each(function() {
                    f(this).domManip(a, c, d, !0)
                });
            if (f.isFunction(j))
                return this.each(function(e) {
                    var g = f(this);
                    a[0] = j.call(this, e, c ? g.html() : b), g.domManip(a, c, d)
                });
            if (this[0]) {
                i = j && j.parentNode, f.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? e = {fragment: i} : e = f.buildFragment(a, this, k), h = e.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild;
                if (g) {
                    c = c && f.nodeName(g, "tr");
                    for (var l = 0, m = this.length, n = m - 1; l < m; l++)
                        d.call(c ? bl(this[l], g) : this[l], e.cacheable || m > 1 && l < n ? f.clone(h, !0, !0) : h)
                }
                k.length && f.each(k, br)
            }
            return this
        }}), f.buildFragment = function(a, b, d) {
        var e, g, h, i, j = a[0];
        b && b[0] && (i = b[0].ownerDocument || b[0]), i.createDocumentFragment || (i = c), a.length === 1 && typeof j == "string" && j.length < 512 && i === c && j.charAt(0) === "<" && !be.test(j) && (f.support.checkClone || !bg.test(j)) && !f.support.unknownElems && bf.test(j) && (g = !0, h = f.fragments[j], h && h !== 1 && (e = h)), e || (e = i.createDocumentFragment(), f.clean(a, i, e, d)), g && (f.fragments[j] = h ? e : 1);
        return{fragment: e, cacheable: g}
    }, f.fragments = {}, f.each({appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function(a, b) {
        f.fn[a] = function(c) {
            var d = [], e = f(c), g = this.length === 1 && this[0].parentNode;
            if (g && g.nodeType === 11 && g.childNodes.length === 1 && e.length === 1) {
                e[b](this[0]);
                return this
            }
            for (var h = 0, i = e.length; h < i; h++) {
                var j = (h > 0 ? this.clone(!0) : this).get();
                f(e[h])[b](j), d = d.concat(j)
            }
            return this.pushStack(d, a, e.selector)
        }
    }), f.extend({clone: function(a, b, c) {
            var d = a.cloneNode(!0), e, g, h;
            if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !f.isXMLDoc(a)) {
                bn(a, d), e = bo(a), g = bo(d);
                for (h = 0; e[h]; ++h)
                    g[h] && bn(e[h], g[h])
            }
            if (b) {
                bm(a, d);
                if (c) {
                    e = bo(a), g = bo(d);
                    for (h = 0; e[h]; ++h)
                        bm(e[h], g[h])
                }
            }
            e = g = null;
            return d
        }, clean: function(a, b, d, e) {
            var g;
            b = b || c, typeof b.createElement == "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
            var h = [], i;
            for (var j = 0, k; (k = a[j]) != null; j++) {
                typeof k == "number" && (k += "");
                if (!k)
                    continue;
                if (typeof k == "string")
                    if (!bc.test(k))
                        k = b.createTextNode(k);
                    else {
                        k = k.replace(_, "<$1></$2>");
                        var l = (ba.exec(k) || ["", ""])[1].toLowerCase(), m = bj[l] || bj._default, n = m[0], o = b.createElement("div");
                        b === c ? bk.appendChild(o) : X(b).appendChild(o), o.innerHTML = m[1] + k + m[2];
                        while (n--)
                            o = o.lastChild;
                        if (!f.support.tbody) {
                            var p = bb.test(k), q = l === "table" && !p ? o.firstChild && o.firstChild.childNodes : m[1] === "<table>" && !p ? o.childNodes : [];
                            for (i = q.length - 1; i >= 0; --i)
                                f.nodeName(q[i], "tbody") && !q[i].childNodes.length && q[i].parentNode.removeChild(q[i])
                        }
                        !f.support.leadingWhitespace && $.test(k) && o.insertBefore(b.createTextNode($.exec(k)[0]), o.firstChild), k = o.childNodes
                    }
                var r;
                if (!f.support.appendChecked)
                    if (k[0] && typeof (r = k.length) == "number")
                        for (i = 0; i < r; i++)
                            bq(k[i]);
                    else
                        bq(k);
                k.nodeType ? h.push(k) : h = f.merge(h, k)
            }
            if (d) {
                g = function(a) {
                    return!a.type || bh.test(a.type)
                };
                for (j = 0; h[j]; j++)
                    if (e && f.nodeName(h[j], "script") && (!h[j].type || h[j].type.toLowerCase() === "text/javascript"))
                        e.push(h[j].parentNode ? h[j].parentNode.removeChild(h[j]) : h[j]);
                    else {
                        if (h[j].nodeType === 1) {
                            var s = f.grep(h[j].getElementsByTagName("script"), g);
                            h.splice.apply(h, [j + 1, 0].concat(s))
                        }
                        d.appendChild(h[j])
                    }
            }
            return h
        }, cleanData: function(a) {
            var b, c, d = f.cache, e = f.event.special, g = f.support.deleteExpando;
            for (var h = 0, i; (i = a[h]) != null; h++) {
                if (i.nodeName && f.noData[i.nodeName.toLowerCase()])
                    continue;
                c = i[f.expando];
                if (c) {
                    b = d[c];
                    if (b && b.events) {
                        for (var j in b.events)
                            e[j] ? f.event.remove(i, j) : f.removeEvent(i, j, b.handle);
                        b.handle && (b.handle.elem = null)
                    }
                    g ? delete i[f.expando] : i.removeAttribute && i.removeAttribute(f.expando), delete d[c]
                }
            }
        }});
    var bs = /alpha\([^)]*\)/i, bt = /opacity=([^)]*)/, bu = /([A-Z]|^ms)/g, bv = /^-?\d+(?:px)?$/i, bw = /^-?\d/, bx = /^([\-+])=([\-+.\de]+)/, by = {position: "absolute", visibility: "hidden", display: "block"}, bz = ["Left", "Right"], bA = ["Top", "Bottom"], bB, bC, bD;
    f.fn.css = function(a, c) {
        if (arguments.length === 2 && c === b)
            return this;
        return f.access(this, a, c, !0, function(a, c, d) {
            return d !== b ? f.style(a, c, d) : f.css(a, c)
        })
    }, f.extend({cssHooks: {opacity: {get: function(a, b) {
                    if (b) {
                        var c = bB(a, "opacity", "opacity");
                        return c === "" ? "1" : c
                    }
                    return a.style.opacity
                }}}, cssNumber: {fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0}, cssProps: {"float": f.support.cssFloat ? "cssFloat" : "styleFloat"}, style: function(a, c, d, e) {
            if (!!a && a.nodeType !== 3 && a.nodeType !== 8 && !!a.style) {
                var g, h, i = f.camelCase(c), j = a.style, k = f.cssHooks[i];
                c = f.cssProps[i] || i;
                if (d === b) {
                    if (k && "get"in k && (g = k.get(a, !1, e)) !== b)
                        return g;
                    return j[c]
                }
                h = typeof d, h === "string" && (g = bx.exec(d)) && (d = +(g[1] + 1) * +g[2] + parseFloat(f.css(a, c)), h = "number");
                if (d == null || h === "number" && isNaN(d))
                    return;
                h === "number" && !f.cssNumber[i] && (d += "px");
                if (!k || !("set"in k) || (d = k.set(a, d)) !== b)
                    try {
                        j[c] = d
                    } catch (l) {
                    }
            }
        }, css: function(a, c, d) {
            var e, g;
            c = f.camelCase(c), g = f.cssHooks[c], c = f.cssProps[c] || c, c === "cssFloat" && (c = "float");
            if (g && "get"in g && (e = g.get(a, !0, d)) !== b)
                return e;
            if (bB)
                return bB(a, c)
        }, swap: function(a, b, c) {
            var d = {};
            for (var e in b)
                d[e] = a.style[e], a.style[e] = b[e];
            c.call(a);
            for (e in b)
                a.style[e] = d[e]
        }}), f.curCSS = f.css, f.each(["height", "width"], function(a, b) {
        f.cssHooks[b] = {get: function(a, c, d) {
                var e;
                if (c) {
                    if (a.offsetWidth !== 0)
                        return bE(a, b, d);
                    f.swap(a, by, function() {
                        e = bE(a, b, d)
                    });
                    return e
                }
            }, set: function(a, b) {
                if (!bv.test(b))
                    return b;
                b = parseFloat(b);
                if (b >= 0)
                    return b + "px"
            }}
    }), f.support.opacity || (f.cssHooks.opacity = {get: function(a, b) {
            return bt.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : ""
        }, set: function(a, b) {
            var c = a.style, d = a.currentStyle, e = f.isNumeric(b) ? "alpha(opacity=" + b * 100 + ")" : "", g = d && d.filter || c.filter || "";
            c.zoom = 1;
            if (b >= 1 && f.trim(g.replace(bs, "")) === "") {
                c.removeAttribute("filter");
                if (d && !d.filter)
                    return
            }
            c.filter = bs.test(g) ? g.replace(bs, e) : g + " " + e
        }}), f(function() {
        f.support.reliableMarginRight || (f.cssHooks.marginRight = {get: function(a, b) {
                var c;
                f.swap(a, {display: "inline-block"}, function() {
                    b ? c = bB(a, "margin-right", "marginRight") : c = a.style.marginRight
                });
                return c
            }})
    }), c.defaultView && c.defaultView.getComputedStyle && (bC = function(a, c) {
        var d, e, g;
        c = c.replace(bu, "-$1").toLowerCase();
        if (!(e = a.ownerDocument.defaultView))
            return b;
        if (g = e.getComputedStyle(a, null))
            d = g.getPropertyValue(c), d === "" && !f.contains(a.ownerDocument.documentElement, a) && (d = f.style(a, c));
        return d
    }), c.documentElement.currentStyle && (bD = function(a, b) {
        var c, d, e, f = a.currentStyle && a.currentStyle[b], g = a.style;
        f === null && g && (e = g[b]) && (f = e), !bv.test(f) && bw.test(f) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), g.left = b === "fontSize" ? "1em" : f || 0, f = g.pixelLeft + "px", g.left = c, d && (a.runtimeStyle.left = d));
        return f === "" ? "auto" : f
    }), bB = bC || bD, f.expr && f.expr.filters && (f.expr.filters.hidden = function(a) {
        var b = a.offsetWidth, c = a.offsetHeight;
        return b === 0 && c === 0 || !f.support.reliableHiddenOffsets && (a.style && a.style.display || f.css(a, "display")) === "none"
    }, f.expr.filters.visible = function(a) {
        return!f.expr.filters.hidden(a)
    });
    var bF = /%20/g, bG = /\[\]$/, bH = /\r?\n/g, bI = /#.*$/, bJ = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, bK = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, bL = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, bM = /^(?:GET|HEAD)$/, bN = /^\/\//, bO = /\?/, bP = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, bQ = /^(?:select|textarea)/i, bR = /\s+/, bS = /([?&])_=[^&]*/, bT = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, bU = f.fn.load, bV = {}, bW = {}, bX, bY, bZ = ["*/"] + ["*"];
    try {
        bX = e.href
    } catch (b$) {
        bX = c.createElement("a"), bX.href = "", bX = bX.href
    }
    bY = bT.exec(bX.toLowerCase()) || [], f.fn.extend({load: function(a, c, d) {
            if (typeof a != "string" && bU)
                return bU.apply(this, arguments);
            if (!this.length)
                return this;
            var e = a.indexOf(" ");
            if (e >= 0) {
                var g = a.slice(e, a.length);
                a = a.slice(0, e)
            }
            var h = "GET";
            c && (f.isFunction(c) ? (d = c, c = b) : typeof c == "object" && (c = f.param(c, f.ajaxSettings.traditional), h = "POST"));
            var i = this;
            f.ajax({url: a, type: h, dataType: "html", data: c, complete: function(a, b, c) {
                    c = a.responseText, a.isResolved() && (a.done(function(a) {
                        c = a
                    }), i.html(g ? f("<div>").append(c.replace(bP, "")).find(g) : c)), d && i.each(d, [c, b, a])
                }});
            return this
        }, serialize: function() {
            return f.param(this.serializeArray())
        }, serializeArray: function() {
            return this.map(function() {
                return this.elements ? f.makeArray(this.elements) : this
            }).filter(function() {
                return this.name && !this.disabled && (this.checked || bQ.test(this.nodeName) || bK.test(this.type))
            }).map(function(a, b) {
                var c = f(this).val();
                return c == null ? null : f.isArray(c) ? f.map(c, function(a, c) {
                    return{name: b.name, value: a.replace(bH, "\r\n")}
                }) : {name: b.name, value: c.replace(bH, "\r\n")}
            }).get()
        }}), f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a, b) {
        f.fn[b] = function(a) {
            return this.bind(b, a)
        }
    }), f.each(["get", "post"], function(a, c) {
        f[c] = function(a, d, e, g) {
            f.isFunction(d) && (g = g || e, e = d, d = b);
            return f.ajax({type: c, url: a, data: d, success: e, dataType: g})
        }
    }), f.extend({getScript: function(a, c) {
            return f.get(a, b, c, "script")
        }, getJSON: function(a, b, c) {
            return f.get(a, b, c, "json")
        }, ajaxSetup: function(a, b) {
            b ? cb(a, f.ajaxSettings) : (b = a, a = f.ajaxSettings), cb(a, b);
            return a
        }, ajaxSettings: {url: bX, isLocal: bL.test(bY[1]), global: !0, type: "GET", contentType: "application/x-www-form-urlencoded", processData: !0, async: !0, accepts: {xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": bZ}, contents: {xml: /xml/, html: /html/, json: /json/}, responseFields: {xml: "responseXML", text: "responseText"}, converters: {"* text": a.String, "text html": !0, "text json": f.parseJSON, "text xml": f.parseXML}, flatOptions: {context: !0, url: !0}}, ajaxPrefilter: b_(bV), ajaxTransport: b_(bW), ajax: function(a, c) {
            function w(a, c, l, m) {
                if (s !== 2) {
                    s = 2, q && clearTimeout(q), p = b, n = m || "", v.readyState = a > 0 ? 4 : 0;
                    var o, r, u, w = c, x = l ? cd(d, v, l) : b, y, z;
                    if (a >= 200 && a < 300 || a === 304) {
                        if (d.ifModified) {
                            if (y = v.getResponseHeader("Last-Modified"))
                                f.lastModified[k] = y;
                            if (z = v.getResponseHeader("Etag"))
                                f.etag[k] = z
                        }
                        if (a === 304)
                            w = "notmodified", o = !0;
                        else
                            try {
                                r = ce(d, x), w = "success", o = !0
                            } catch (A) {
                                w = "parsererror", u = A
                            }
                    } else {
                        u = w;
                        if (!w || a)
                            w = "error", a < 0 && (a = 0)
                    }
                    v.status = a, v.statusText = "" + (c || w), o ? h.resolveWith(e, [r, w, v]) : h.rejectWith(e, [v, w, u]), v.statusCode(j), j = b, t && g.trigger("ajax" + (o ? "Success" : "Error"), [v, d, o ? r : u]), i.fireWith(e, [v, w]), t && (g.trigger("ajaxComplete", [v, d]), --f.active || f.event.trigger("ajaxStop"))
                }
            }
            typeof a == "object" && (c = a, a = b), c = c || {};
            var d = f.ajaxSetup({}, c), e = d.context || d, g = e !== d && (e.nodeType || e instanceof f) ? f(e) : f.event, h = f.Deferred(), i = f.Callbacks("once memory"), j = d.statusCode || {}, k, l = {}, m = {}, n, o, p, q, r, s = 0, t, u, v = {readyState: 0, setRequestHeader: function(a, b) {
                    if (!s) {
                        var c = a.toLowerCase();
                        a = m[c] = m[c] || a, l[a] = b
                    }
                    return this
                }, getAllResponseHeaders: function() {
                    return s === 2 ? n : null
                }, getResponseHeader: function(a) {
                    var c;
                    if (s === 2) {
                        if (!o) {
                            o = {};
                            while (c = bJ.exec(n))
                                o[c[1].toLowerCase()] = c[2]
                        }
                        c = o[a.toLowerCase()]
                    }
                    return c === b ? null : c
                }, overrideMimeType: function(a) {
                    s || (d.mimeType = a);
                    return this
                }, abort: function(a) {
                    a = a || "abort", p && p.abort(a), w(0, a);
                    return this
                }};
            h.promise(v), v.success = v.done, v.error = v.fail, v.complete = i.add, v.statusCode = function(a) {
                if (a) {
                    var b;
                    if (s < 2)
                        for (b in a)
                            j[b] = [j[b], a[b]];
                    else
                        b = a[v.status], v.then(b, b)
                }
                return this
            }, d.url = ((a || d.url) + "").replace(bI, "").replace(bN, bY[1] + "//"), d.dataTypes = f.trim(d.dataType || "*").toLowerCase().split(bR), d.crossDomain == null && (r = bT.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] == bY[1] && r[2] == bY[2] && (r[3] || (r[1] === "http:" ? 80 : 443)) == (bY[3] || (bY[1] === "http:" ? 80 : 443)))), d.data && d.processData && typeof d.data != "string" && (d.data = f.param(d.data, d.traditional)), ca(bV, d, c, v);
            if (s === 2)
                return!1;
            t = d.global, d.type = d.type.toUpperCase(), d.hasContent = !bM.test(d.type), t && f.active++ === 0 && f.event.trigger("ajaxStart");
            if (!d.hasContent) {
                d.data && (d.url += (bO.test(d.url) ? "&" : "?") + d.data, delete d.data), k = d.url;
                if (d.cache === !1) {
                    var x = f.now(), y = d.url.replace(bS, "$1_=" + x);
                    d.url = y + (y === d.url ? (bO.test(d.url) ? "&" : "?") + "_=" + x : "")
                }
            }
            (d.data && d.hasContent && d.contentType !== !1 || c.contentType) && v.setRequestHeader("Content-Type", d.contentType), d.ifModified && (k = k || d.url, f.lastModified[k] && v.setRequestHeader("If-Modified-Since", f.lastModified[k]), f.etag[k] && v.setRequestHeader("If-None-Match", f.etag[k])), v.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + (d.dataTypes[0] !== "*" ? ", " + bZ + "; q=0.01" : "") : d.accepts["*"]);
            for (u in d.headers)
                v.setRequestHeader(u, d.headers[u]);
            if (d.beforeSend && (d.beforeSend.call(e, v, d) === !1 || s === 2)) {
                v.abort();
                return!1
            }
            for (u in{success:1, error:1, complete:1})
                v[u](d[u]);
            p = ca(bW, d, c, v);
            if (!p)
                w(-1, "No Transport");
            else {
                v.readyState = 1, t && g.trigger("ajaxSend", [v, d]), d.async && d.timeout > 0 && (q = setTimeout(function() {
                    v.abort("timeout")
                }, d.timeout));
                try {
                    s = 1, p.send(l, w)
                } catch (z) {
                    s < 2 ? w(-1, z) : f.error(z)
                }
            }
            return v
        }, param: function(a, c) {
            var d = [], e = function(a, b) {
                b = f.isFunction(b) ? b() : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
            };
            c === b && (c = f.ajaxSettings.traditional);
            if (f.isArray(a) || a.jquery && !f.isPlainObject(a))
                f.each(a, function() {
                    e(this.name, this.value)
                });
            else
                for (var g in a)
                    cc(g, a[g], c, e);
            return d.join("&").replace(bF, "+")
        }}), f.extend({active: 0, lastModified: {}, etag: {}});
    var cf = f.now(), cg = /(\=)\?(&|$)|\?\?/i;
    f.ajaxSetup({jsonp: "callback", jsonpCallback: function() {
            return f.expando + "_" + cf++
        }}), f.ajaxPrefilter("json jsonp", function(b, c, d) {
        var e = b.contentType === "application/x-www-form-urlencoded" && typeof b.data == "string";
        if (b.dataTypes[0] === "jsonp" || b.jsonp !== !1 && (cg.test(b.url) || e && cg.test(b.data))) {
            var g, h = b.jsonpCallback = f.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, i = a[h], j = b.url, k = b.data, l = "$1" + h + "$2";
            b.jsonp !== !1 && (j = j.replace(cg, l), b.url === j && (e && (k = k.replace(cg, l)), b.data === k && (j += (/\?/.test(j) ? "&" : "?") + b.jsonp + "=" + h))), b.url = j, b.data = k, a[h] = function(a) {
                g = [a]
            }, d.always(function() {
                a[h] = i, g && f.isFunction(i) && a[h](g[0])
            }), b.converters["script json"] = function() {
                g || f.error(h + " was not called");
                return g[0]
            }, b.dataTypes[0] = "json";
            return"script"
        }
    }), f.ajaxSetup({accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"}, contents: {script: /javascript|ecmascript/}, converters: {"text script": function(a) {
                f.globalEval(a);
                return a
            }}}), f.ajaxPrefilter("script", function(a) {
        a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
    }), f.ajaxTransport("script", function(a) {
        if (a.crossDomain) {
            var d, e = c.head || c.getElementsByTagName("head")[0] || c.documentElement;
            return{send: function(f, g) {
                    d = c.createElement("script"), d.async = "async", a.scriptCharset && (d.charset = a.scriptCharset), d.src = a.url, d.onload = d.onreadystatechange = function(a, c) {
                        if (c || !d.readyState || /loaded|complete/.test(d.readyState))
                            d.onload = d.onreadystatechange = null, e && d.parentNode && e.removeChild(d), d = b, c || g(200, "success")
                    }, e.insertBefore(d, e.firstChild)
                }, abort: function() {
                    d && d.onload(0, 1)
                }}
        }
    });
    var ch = a.ActiveXObject ? function() {
        for (var a in cj)
            cj[a](0, 1)
    } : !1, ci = 0, cj;
    f.ajaxSettings.xhr = a.ActiveXObject ? function() {
        return!this.isLocal && ck() || cl()
    } : ck, function(a) {
        f.extend(f.support, {ajax: !!a, cors: !!a && "withCredentials"in a})
    }(f.ajaxSettings.xhr()), f.support.ajax && f.ajaxTransport(function(c) {
        if (!c.crossDomain || f.support.cors) {
            var d;
            return{send: function(e, g) {
                    var h = c.xhr(), i, j;
                    c.username ? h.open(c.type, c.url, c.async, c.username, c.password) : h.open(c.type, c.url, c.async);
                    if (c.xhrFields)
                        for (j in c.xhrFields)
                            h[j] = c.xhrFields[j];
                    c.mimeType && h.overrideMimeType && h.overrideMimeType(c.mimeType), !c.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
                    try {
                        for (j in e)
                            h.setRequestHeader(j, e[j])
                    } catch (k) {
                    }
                    h.send(c.hasContent && c.data || null), d = function(a, e) {
                        var j, k, l, m, n;
                        try {
                            if (d && (e || h.readyState === 4)) {
                                d = b, i && (h.onreadystatechange = f.noop, ch && delete cj[i]);
                                if (e)
                                    h.readyState !== 4 && h.abort();
                                else {
                                    j = h.status, l = h.getAllResponseHeaders(), m = {}, n = h.responseXML, n && n.documentElement && (m.xml = n), m.text = h.responseText;
                                    try {
                                        k = h.statusText
                                    } catch (o) {
                                        k = ""
                                    }
                                    !j && c.isLocal && !c.crossDomain ? j = m.text ? 200 : 404 : j === 1223 && (j = 204)
                                }
                            }
                        } catch (p) {
                            e || g(-1, p)
                        }
                        m && g(j, k, m, l)
                    }, !c.async || h.readyState === 4 ? d() : (i = ++ci, ch && (cj || (cj = {}, f(a).unload(ch)), cj[i] = d), h.onreadystatechange = d)
                }, abort: function() {
                    d && d(0, 1)
                }}
        }
    });
    var cm = {}, cn, co, cp = /^(?:toggle|show|hide)$/, cq = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, cr, cs = [["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["opacity"]], ct;
    f.fn.extend({show: function(a, b, c) {
            var d, e;
            if (a || a === 0)
                return this.animate(cw("show", 3), a, b, c);
            for (var g = 0, h = this.length; g < h; g++)
                d = this[g], d.style && (e = d.style.display, !f._data(d, "olddisplay") && e === "none" && (e = d.style.display = ""), e === "" && f.css(d, "display") === "none" && f._data(d, "olddisplay", cx(d.nodeName)));
            for (g = 0; g < h; g++) {
                d = this[g];
                if (d.style) {
                    e = d.style.display;
                    if (e === "" || e === "none")
                        d.style.display = f._data(d, "olddisplay") || ""
                }
            }
            return this
        }, hide: function(a, b, c) {
            if (a || a === 0)
                return this.animate(cw("hide", 3), a, b, c);
            var d, e, g = 0, h = this.length;
            for (; g < h; g++)
                d = this[g], d.style && (e = f.css(d, "display"), e !== "none" && !f._data(d, "olddisplay") && f._data(d, "olddisplay", e));
            for (g = 0; g < h; g++)
                this[g].style && (this[g].style.display = "none");
            return this
        }, _toggle: f.fn.toggle, toggle: function(a, b, c) {
            var d = typeof a == "boolean";
            f.isFunction(a) && f.isFunction(b) ? this._toggle.apply(this, arguments) : a == null || d ? this.each(function() {
                var b = d ? a : f(this).is(":hidden");
                f(this)[b ? "show" : "hide"]()
            }) : this.animate(cw("toggle", 3), a, b, c);
            return this
        }, fadeTo: function(a, b, c, d) {
            return this.filter(":hidden").css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
        }, animate: function(a, b, c, d) {
            function g() {
                e.queue === !1 && f._mark(this);
                var b = f.extend({}, e), c = this.nodeType === 1, d = c && f(this).is(":hidden"), g, h, i, j, k, l, m, n, o;
                b.animatedProperties = {};
                for (i in a) {
                    g = f.camelCase(i), i !== g && (a[g] = a[i], delete a[i]), h = a[g], f.isArray(h) ? (b.animatedProperties[g] = h[1], h = a[g] = h[0]) : b.animatedProperties[g] = b.specialEasing && b.specialEasing[g] || b.easing || "swing";
                    if (h === "hide" && d || h === "show" && !d)
                        return b.complete.call(this);
                    c && (g === "height" || g === "width") && (b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], f.css(this, "display") === "inline" && f.css(this, "float") === "none" && (!f.support.inlineBlockNeedsLayout || cx(this.nodeName) === "inline" ? this.style.display = "inline-block" : this.style.zoom = 1))
                }
                b.overflow != null && (this.style.overflow = "hidden");
                for (i in a)
                    j = new f.fx(this, b, i), h = a[i], cp.test(h) ? (o = f._data(this, "toggle" + i) || (h === "toggle" ? d ? "show" : "hide" : 0), o ? (f._data(this, "toggle" + i, o === "show" ? "hide" : "show"), j[o]()) : j[h]()) : (k = cq.exec(h), l = j.cur(), k ? (m = parseFloat(k[2]), n = k[3] || (f.cssNumber[i] ? "" : "px"), n !== "px" && (f.style(this, i, (m || 1) + n), l = (m || 1) / j.cur() * l, f.style(this, i, l + n)), k[1] && (m = (k[1] === "-=" ? -1 : 1) * m + l), j.custom(l, m, n)) : j.custom(l, h, ""));
                return!0
            }
            var e = f.speed(b, c, d);
            if (f.isEmptyObject(a))
                return this.each(e.complete, [!1]);
            a = f.extend({}, a);
            return e.queue === !1 ? this.each(g) : this.queue(e.queue, g)
        }, stop: function(a, c, d) {
            typeof a != "string" && (d = c, c = a, a = b), c && a !== !1 && this.queue(a || "fx", []);
            return this.each(function() {
                function h(a, b, c) {
                    var e = b[c];
                    f.removeData(a, c, !0), e.stop(d)
                }
                var b, c = !1, e = f.timers, g = f._data(this);
                d || f._unmark(!0, this);
                if (a == null)
                    for (b in g)
                        g[b].stop && b.indexOf(".run") === b.length - 4 && h(this, g, b);
                else
                    g[b = a + ".run"] && g[b].stop && h(this, g, b);
                for (b = e.length; b--; )
                    e[b].elem === this && (a == null || e[b].queue === a) && (d ? e[b](!0) : e[b].saveState(), c = !0, e.splice(b, 1));
                (!d || !c) && f.dequeue(this, a)
            })
        }}), f.each({slideDown: cw("show", 1), slideUp: cw("hide", 1), slideToggle: cw("toggle", 1), fadeIn: {opacity: "show"}, fadeOut: {opacity: "hide"}, fadeToggle: {opacity: "toggle"}}, function(a, b) {
        f.fn[a] = function(a, c, d) {
            return this.animate(b, a, c, d)
        }
    }), f.extend({speed: function(a, b, c) {
            var d = a && typeof a == "object" ? f.extend({}, a) : {complete: c || !c && b || f.isFunction(a) && a, duration: a, easing: c && b || b && !f.isFunction(b) && b};
            d.duration = f.fx.off ? 0 : typeof d.duration == "number" ? d.duration : d.duration in f.fx.speeds ? f.fx.speeds[d.duration] : f.fx.speeds._default;
            if (d.queue == null || d.queue === !0)
                d.queue = "fx";
            d.old = d.complete, d.complete = function(a) {
                f.isFunction(d.old) && d.old.call(this), d.queue ? f.dequeue(this, d.queue) : a !== !1 && f._unmark(this)
            };
            return d
        }, easing: {linear: function(a, b, c, d) {
                return c + d * a
            }, swing: function(a, b, c, d) {
                return(-Math.cos(a * Math.PI) / 2 + .5) * d + c
            }}, timers: [], fx: function(a, b, c) {
            this.options = b, this.elem = a, this.prop = c, b.orig = b.orig || {}
        }}), f.fx.prototype = {update: function() {
            this.options.step && this.options.step.call(this.elem, this.now, this), (f.fx.step[this.prop] || f.fx.step._default)(this)
        }, cur: function() {
            if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null))
                return this.elem[this.prop];
            var a, b = f.css(this.elem, this.prop);
            return isNaN(a = parseFloat(b)) ? !b || b === "auto" ? 0 : b : a
        }, custom: function(a, c, d) {
            function h(a) {
                return e.step(a)
            }
            var e = this, g = f.fx;
            this.startTime = ct || cu(), this.end = c, this.now = this.start = a, this.pos = this.state = 0, this.unit = d || this.unit || (f.cssNumber[this.prop] ? "" : "px"), h.queue = this.options.queue, h.elem = this.elem, h.saveState = function() {
                e.options.hide && f._data(e.elem, "fxshow" + e.prop) === b && f._data(e.elem, "fxshow" + e.prop, e.start)
            }, h() && f.timers.push(h) && !cr && (cr = setInterval(g.tick, g.interval))
        }, show: function() {
            var a = f._data(this.elem, "fxshow" + this.prop);
            this.options.orig[this.prop] = a || f.style(this.elem, this.prop), this.options.show = !0, a !== b ? this.custom(this.cur(), a) : this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()), f(this.elem).show()
        }, hide: function() {
            this.options.orig[this.prop] = f._data(this.elem, "fxshow" + this.prop) || f.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0)
        }, step: function(a) {
            var b, c, d, e = ct || cu(), g = !0, h = this.elem, i = this.options;
            if (a || e >= i.duration + this.startTime) {
                this.now = this.end, this.pos = this.state = 1, this.update(), i.animatedProperties[this.prop] = !0;
                for (b in i.animatedProperties)
                    i.animatedProperties[b] !== !0 && (g = !1);
                if (g) {
                    i.overflow != null && !f.support.shrinkWrapBlocks && f.each(["", "X", "Y"], function(a, b) {
                        h.style["overflow" + b] = i.overflow[a]
                    }), i.hide && f(h).hide();
                    if (i.hide || i.show)
                        for (b in i.animatedProperties)
                            f.style(h, b, i.orig[b]), f.removeData(h, "fxshow" + b, !0), f.removeData(h, "toggle" + b, !0);
                    d = i.complete, d && (i.complete = !1, d.call(h))
                }
                return!1
            }
            i.duration == Infinity ? this.now = e : (c = e - this.startTime, this.state = c / i.duration, this.pos = f.easing[i.animatedProperties[this.prop]](this.state, c, 0, 1, i.duration), this.now = this.start + (this.end - this.start) * this.pos), this.update();
            return!0
        }}, f.extend(f.fx, {tick: function() {
            var a, b = f.timers, c = 0;
            for (; c < b.length; c++)
                a = b[c], !a() && b[c] === a && b.splice(c--, 1);
            b.length || f.fx.stop()
        }, interval: 13, stop: function() {
            clearInterval(cr), cr = null
        }, speeds: {slow: 600, fast: 200, _default: 400}, step: {opacity: function(a) {
                f.style(a.elem, "opacity", a.now)
            }, _default: function(a) {
                a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = a.now + a.unit : a.elem[a.prop] = a.now
            }}}), f.each(["width", "height"], function(a, b) {
        f.fx.step[b] = function(a) {
            f.style(a.elem, b, Math.max(0, a.now))
        }
    }), f.expr && f.expr.filters && (f.expr.filters.animated = function(a) {
        return f.grep(f.timers, function(b) {
            return a === b.elem
        }).length
    });
    var cy = /^t(?:able|d|h)$/i, cz = /^(?:body|html)$/i;
    "getBoundingClientRect"in c.documentElement ? f.fn.offset = function(a) {
        var b = this[0], c;
        if (a)
            return this.each(function(b) {
                f.offset.setOffset(this, a, b)
            });
        if (!b || !b.ownerDocument)
            return null;
        if (b === b.ownerDocument.body)
            return f.offset.bodyOffset(b);
        try {
            c = b.getBoundingClientRect()
        } catch (d) {
        }
        var e = b.ownerDocument, g = e.documentElement;
        if (!c || !f.contains(g, b))
            return c ? {top: c.top, left: c.left} : {top: 0, left: 0};
        var h = e.body, i = cA(e), j = g.clientTop || h.clientTop || 0, k = g.clientLeft || h.clientLeft || 0, l = i.pageYOffset || f.support.boxModel && g.scrollTop || h.scrollTop, m = i.pageXOffset || f.support.boxModel && g.scrollLeft || h.scrollLeft, n = c.top + l - j, o = c.left + m - k;
        return{top: n, left: o}
    } : f.fn.offset = function(a) {
        var b = this[0];
        if (a)
            return this.each(function(b) {
                f.offset.setOffset(this, a, b)
            });
        if (!b || !b.ownerDocument)
            return null;
        if (b === b.ownerDocument.body)
            return f.offset.bodyOffset(b);
        var c, d = b.offsetParent, e = b, g = b.ownerDocument, h = g.documentElement, i = g.body, j = g.defaultView, k = j ? j.getComputedStyle(b, null) : b.currentStyle, l = b.offsetTop, m = b.offsetLeft;
        while ((b = b.parentNode) && b !== i && b !== h) {
            if (f.support.fixedPosition && k.position === "fixed")
                break;
            c = j ? j.getComputedStyle(b, null) : b.currentStyle, l -= b.scrollTop, m -= b.scrollLeft, b === d && (l += b.offsetTop, m += b.offsetLeft, f.support.doesNotAddBorder && (!f.support.doesAddBorderForTableAndCells || !cy.test(b.nodeName)) && (l += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), e = d, d = b.offsetParent), f.support.subtractsBorderForOverflowNotVisible && c.overflow !== "visible" && (l += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), k = c
        }
        if (k.position === "relative" || k.position === "static")
            l += i.offsetTop, m += i.offsetLeft;
        f.support.fixedPosition && k.position === "fixed" && (l += Math.max(h.scrollTop, i.scrollTop), m += Math.max(h.scrollLeft, i.scrollLeft));
        return{top: l, left: m}
    }, f.offset = {bodyOffset: function(a) {
            var b = a.offsetTop, c = a.offsetLeft;
            f.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(f.css(a, "marginTop")) || 0, c += parseFloat(f.css(a, "marginLeft")) || 0);
            return{top: b, left: c}
        }, setOffset: function(a, b, c) {
            var d = f.css(a, "position");
            d === "static" && (a.style.position = "relative");
            var e = f(a), g = e.offset(), h = f.css(a, "top"), i = f.css(a, "left"), j = (d === "absolute" || d === "fixed") && f.inArray("auto", [h, i]) > -1, k = {}, l = {}, m, n;
            j ? (l = e.position(), m = l.top, n = l.left) : (m = parseFloat(h) || 0, n = parseFloat(i) || 0), f.isFunction(b) && (b = b.call(a, c, g)), b.top != null && (k.top = b.top - g.top + m), b.left != null && (k.left = b.left - g.left + n), "using"in b ? b.using.call(a, k) : e.css(k)
        }}, f.fn.extend({position: function() {
            if (!this[0])
                return null;
            var a = this[0], b = this.offsetParent(), c = this.offset(), d = cz.test(b[0].nodeName) ? {top: 0, left: 0} : b.offset();
            c.top -= parseFloat(f.css(a, "marginTop")) || 0, c.left -= parseFloat(f.css(a, "marginLeft")) || 0, d.top += parseFloat(f.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat(f.css(b[0], "borderLeftWidth")) || 0;
            return{top: c.top - d.top, left: c.left - d.left}
        }, offsetParent: function() {
            return this.map(function() {
                var a = this.offsetParent || c.body;
                while (a && !cz.test(a.nodeName) && f.css(a, "position") === "static")
                    a = a.offsetParent;
                return a
            })
        }}), f.each(["Left", "Top"], function(a, c) {
        var d = "scroll" + c;
        f.fn[d] = function(c) {
            var e, g;
            if (c === b) {
                e = this[0];
                if (!e)
                    return null;
                g = cA(e);
                return g ? "pageXOffset"in g ? g[a ? "pageYOffset" : "pageXOffset"] : f.support.boxModel && g.document.documentElement[d] || g.document.body[d] : e[d]
            }
            return this.each(function() {
                g = cA(this), g ? g.scrollTo(a ? f(g).scrollLeft() : c, a ? c : f(g).scrollTop()) : this[d] = c
            })
        }
    }), f.each(["Height", "Width"], function(a, c) {
        var d = c.toLowerCase();
        f.fn["inner" + c] = function() {
            var a = this[0];
            return a ? a.style ? parseFloat(f.css(a, d, "padding")) : this[d]() : null
        }, f.fn["outer" + c] = function(a) {
            var b = this[0];
            return b ? b.style ? parseFloat(f.css(b, d, a ? "margin" : "border")) : this[d]() : null
        }, f.fn[d] = function(a) {
            var e = this[0];
            if (!e)
                return a == null ? null : this;
            if (f.isFunction(a))
                return this.each(function(b) {
                    var c = f(this);
                    c[d](a.call(this, b, c[d]()))
                });
            if (f.isWindow(e)) {
                var g = e.document.documentElement["client" + c], h = e.document.body;
                return e.document.compatMode === "CSS1Compat" && g || h && h["client" + c] || g
            }
            if (e.nodeType === 9)
                return Math.max(e.documentElement["client" + c], e.body["scroll" + c], e.documentElement["scroll" + c], e.body["offset" + c], e.documentElement["offset" + c]);
            if (a === b) {
                var i = f.css(e, d), j = parseFloat(i);
                return f.isNumeric(j) ? j : i
            }
            return this.css(d, typeof a == "string" ? a : a + "px")
        }
    }), a.jQuery = a.$ = f
})(window);

/* jquery.sizzle.js | http://sizzlejs.com */
(function(window, undefined) {
    var document = window.document, docElem = document.documentElement, expando = "sizcache" + (Math.random() + '').replace('.', ''), done = 0, toString = Object.prototype.toString, strundefined = "undefined", hasDuplicate = false, baseHasDuplicate = true, rquickExpr = /^#([\w\-]+$)|^(\w+$)|^\.([\w\-]+$)/, chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, rbackslash = /\\/g, rnonWord = /\W/, rstartsWithWord = /^\w/, rnonDigit = /\D/, rnth = /(-?)(\d*)(?:n([+\-]?\d*))?/, radjacent = /^\+|\s*/g, rheader = /h\d/i, rinputs = /input|select|textarea|button/i, rtnfr = /[\t\n\f\r]/g, characterEncoding = "(?:[-\\w]|[^\\x00-\\xa0]|\\\\.)", matchExpr = {ID: new RegExp("#(" + characterEncoding + "+)"), CLASS: new RegExp("\\.(" + characterEncoding + "+)"), NAME: new RegExp("\\[name=['\"]*(" + characterEncoding + "+)['\"]*\\]"), TAG: new RegExp("^(" + characterEncoding.replace("[-", "[-\\*") + "+)"), ATTR: new RegExp("\\[\\s*(" + characterEncoding + "+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?" + characterEncoding + "*)|)|)\\s*\\]"), PSEUDO: new RegExp(":(" + characterEncoding + "+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?"), CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/}, origPOS = matchExpr.POS, leftMatchExpr = (function() {
        var type, fescape = function(all, num) {
            return"\\" + (num - 0 + 1)
        }, leftMatch = {};
        for (type in matchExpr) {
            matchExpr[type] = new RegExp(matchExpr[type].source + (/(?![^\[]*\])(?![^\(]*\))/.source));
            leftMatch[type] = new RegExp(/(^(?:.|\r|\n)*?)/.source + matchExpr[type].source.replace(/\\(\d+)/g, fescape))
        }
        matchExpr.globalPOS = origPOS;
        return leftMatch
    })(), assert = function(fn) {
        var pass = false, div = document.createElement("div");
        try {
            pass = fn(div)
        } catch (e) {
        }
        div = null;
        return pass
    }, assertGetIdNotName = assert(function(div) {
        var pass = true, id = "script" + (new Date()).getTime();
        div.innerHTML = "<a name ='" + id + "'/>";
        docElem.insertBefore(div, docElem.firstChild);
        if (document.getElementById(id)) {
            pass = false
        }
        docElem.removeChild(div);
        return pass
    }), assertTagNameNoComments = assert(function(div) {
        div.appendChild(document.createComment(""));
        return div.getElementsByTagName("*").length === 0
    }), assertHrefNotNormalized = assert(function(div) {
        div.innerHTML = "<a href='#'></a>";
        return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && div.firstChild.getAttribute("href") === "#"
    }), assertUsableClassName = assert(function(div) {
        div.innerHTML = "<div class='test e'></div><div class='test'></div>";
        if (!div.getElementsByClassName || div.getElementsByClassName("e").length === 0) {
            return false
        }
        div.lastChild.className = "e";
        return div.getElementsByClassName("e").length !== 1
    });
    [0, 0].sort(function() {
        baseHasDuplicate = false;
        return 0
    });
    var Sizzle = function(selector, context, results) {
        results = results || [];
        context = context || document;
        var match, elem, contextXML, nodeType = context.nodeType;
        if (nodeType !== 1 && nodeType !== 9) {
            return[]
        }
        if (!selector || typeof selector !== "string") {
            return results
        }
        contextXML = isXML(context);
        if (!contextXML) {
            if ((match = rquickExpr.exec(selector))) {
                if (match[1]) {
                    if (nodeType === 9) {
                        elem = context.getElementById(match[1]);
                        if (elem && elem.parentNode) {
                            if (elem.id === match[1]) {
                                return makeArray([elem], results)
                            }
                        } else {
                            return makeArray([], results)
                        }
                    } else {
                        if (context.ownerDocument && (elem = context.ownerDocument.getElementById(match[1])) && contains(context, elem) && elem.id === match[1]) {
                            return makeArray([elem], results)
                        }
                    }
                } else if (match[2]) {
                    if (selector === "body" && context.body) {
                        return makeArray([context.body], results)
                    }
                    return makeArray(context.getElementsByTagName(selector), results)
                } else if (assertUsableClassName && match[3] && context.getElementsByClassName) {
                    return makeArray(context.getElementsByClassName(match[3]), results)
                }
            }
        }
        return select(selector, context, results, undefined, contextXML)
    };
    var select = function(selector, context, results, seed, contextXML) {
        var m, set, checkSet, extra, ret, cur, pop, i, origContext = context, prune = true, parts = [], soFar = selector;
        do {
            chunker.exec("");
            m = chunker.exec(soFar);
            if (m) {
                soFar = m[3];
                parts.push(m[1]);
                if (m[2]) {
                    extra = m[3];
                    break
                }
            }
        } while (m);
        if (parts.length > 1 && origPOS.exec(selector)) {
            if (parts.length === 2 && Expr.relative[parts[0]]) {
                set = posProcess(parts[0] + parts[1], context, seed, contextXML)
            } else {
                set = Expr.relative[parts[0]] ? [context] : Sizzle(parts.shift(), context);
                while (parts.length) {
                    selector = parts.shift();
                    if (Expr.relative[selector]) {
                        selector += parts.shift()
                    }
                    set = posProcess(selector, set, seed, contextXML)
                }
            }
        } else {
            if (!seed && parts.length > 1 && context.nodeType === 9 && !contextXML && matchExpr.ID.test(parts[0]) && !matchExpr.ID.test(parts[parts.length - 1])) {
                ret = Sizzle.find(parts.shift(), context, contextXML);
                context = ret.expr ? Sizzle.filter(ret.expr, ret.set)[0] : ret.set[0]
            }
            if (context) {
                ret = seed ? {expr: parts.pop(), set: makeArray(seed)} : Sizzle.find(parts.pop(), (parts.length >= 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode) || context, contextXML);
                set = ret.expr ? Sizzle.filter(ret.expr, ret.set) : ret.set;
                if (parts.length > 0) {
                    checkSet = makeArray(set)
                } else {
                    prune = false
                }
                while (parts.length) {
                    cur = parts.pop();
                    pop = cur;
                    if (!Expr.relative[cur]) {
                        cur = ""
                    } else {
                        pop = parts.pop()
                    }
                    if (pop == null) {
                        pop = context
                    }
                    Expr.relative[cur](checkSet, pop, contextXML)
                }
            } else {
                checkSet = parts = []
            }
        }
        if (!checkSet) {
            checkSet = set
        }
        if (!checkSet) {
            Sizzle.error(cur || selector)
        }
        if (toString.call(checkSet) === "[object Array]") {
            if (!prune) {
                results.push.apply(results, checkSet)
            } else if (context && context.nodeType === 1) {
                for (i = 0; checkSet[i] != null; i++) {
                    if (checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i]))) {
                        results.push(set[i])
                    }
                }
            } else {
                for (i = 0; checkSet[i] != null; i++) {
                    if (checkSet[i] && checkSet[i].nodeType === 1) {
                        results.push(set[i])
                    }
                }
            }
        } else {
            makeArray(checkSet, results)
        }
        if (extra) {
            select(extra, origContext, results, seed, contextXML);
            uniqueSort(results)
        }
        return results
    };
    var isXML = Sizzle.isXML = function(elem) {
        var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
        return documentElement ? documentElement.nodeName !== "HTML" : false
    };
    var makeArray = function(array, results) {
        results = results || [];
        var i = 0, len = array.length;
        if (typeof len === "number") {
            for (; i < len; i++) {
                results.push(array[i])
            }
        } else {
            for (; array[i]; i++) {
                results.push(array[i])
            }
        }
        return results
    };
    var uniqueSort = Sizzle.uniqueSort = function(results) {
        if (sortOrder) {
            hasDuplicate = baseHasDuplicate;
            results.sort(sortOrder);
            if (hasDuplicate) {
                for (var i = 1; i < results.length; i++) {
                    if (results[i] === results[i - 1]) {
                        results.splice(i--, 1)
                    }
                }
            }
        }
        return results
    };
    var contains = Sizzle.contains = docElem.compareDocumentPosition ? function(a, b) {
        return!!(a.compareDocumentPosition(b) & 16)
    } : docElem.contains ? function(a, b) {
        return a !== b && (a.contains ? a.contains(b) : false)
    } : function(a, b) {
        while ((b = b.parentNode)) {
            if (b === a) {
                return true
            }
        }
        return false
    };
    Sizzle.matches = function(expr, set) {
        return select(expr, document, [], set, isXML(document))
    };
    Sizzle.matchesSelector = function(node, expr) {
        return select(expr, document, [], [node], isXML(document)).length > 0
    };
    Sizzle.find = function(expr, context, contextXML) {
        var set, i, len, match, type, left;
        if (!expr) {
            return[]
        }
        for (i = 0, len = Expr.order.length; i < len; i++) {
            type = Expr.order[i];
            if ((match = leftMatchExpr[type].exec(expr))) {
                left = match[1];
                match.splice(1, 1);
                if (left.substr(left.length - 1) !== "\\") {
                    match[1] = (match[1] || "").replace(rbackslash, "");
                    set = Expr.find[type](match, context, contextXML);
                    if (set != null) {
                        expr = expr.replace(matchExpr[type], "");
                        break
                    }
                }
            }
        }
        if (!set) {
            set = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName("*") : []
        }
        return{set: set, expr: expr}
    };
    Sizzle.filter = function(expr, set, inplace, not) {
        var match, anyFound, type, found, item, filter, left, i, pass, old = expr, result = [], curLoop = set, isXMLFilter = set && set[0] && isXML(set[0]);
        while (expr && set.length) {
            for (type in Expr.filter) {
                if ((match = leftMatchExpr[type].exec(expr)) != null && match[2]) {
                    filter = Expr.filter[type];
                    left = match[1];
                    anyFound = false;
                    match.splice(1, 1);
                    if (left.substr(left.length - 1) === "\\") {
                        continue
                    }
                    if (curLoop === result) {
                        result = []
                    }
                    if (Expr.preFilter[type]) {
                        match = Expr.preFilter[type](match, curLoop, inplace, result, not, isXMLFilter);
                        if (!match) {
                            anyFound = found = true
                        } else if (match === true) {
                            continue
                        }
                    }
                    if (match) {
                        for (i = 0; (item = curLoop[i]) != null; i++) {
                            if (item) {
                                found = filter(item, match, i, curLoop);
                                pass = not ^ found;
                                if (inplace && found != null) {
                                    if (pass) {
                                        anyFound = true
                                    } else {
                                        curLoop[i] = false
                                    }
                                } else if (pass) {
                                    result.push(item);
                                    anyFound = true
                                }
                            }
                        }
                    }
                    if (found !== undefined) {
                        if (!inplace) {
                            curLoop = result
                        }
                        expr = expr.replace(matchExpr[type], "");
                        if (!anyFound) {
                            return[]
                        }
                        break
                    }
                }
            }
            if (expr === old) {
                if (anyFound == null) {
                    Sizzle.error(expr)
                } else {
                    break
                }
            }
            old = expr
        }
        return curLoop
    };
    Sizzle.error = function(msg) {
        throw new Error("Syntax error, unrecognized expression: " + msg)
    };
    var getText = Sizzle.getText = function(elem) {
        var i, node, nodeType = elem.nodeType, ret = "";
        if (nodeType) {
            if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
                if (typeof elem.textContent === "string") {
                    return elem.textContent
                } else {
                    for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
                        ret += getText(elem)
                    }
                }
            } else if (nodeType === 3 || nodeType === 4) {
                return elem.nodeValue
            }
        } else {
            for (i = 0; (node = elem[i]); i++) {
                if (node.nodeType !== 8) {
                    ret += getText(node)
                }
            }
        }
        return ret
    };
    var Expr = Sizzle.selectors = {match: matchExpr, leftMatch: leftMatchExpr, order: ["ID", "NAME", "TAG"], attrMap: {"class": "className", "for": "htmlFor"}, attrHandle: {href: assertHrefNotNormalized ? function(elem) {
                return elem.getAttribute("href")
            } : function(elem) {
                return elem.getAttribute("href", 2)
            }, type: function(elem) {
                return elem.getAttribute("type")
            }}, relative: {"+": function(checkSet, part) {
                var isPartStr = typeof part === "string", isTag = isPartStr && !rnonWord.test(part), isPartStrNotTag = isPartStr && !isTag;
                if (isTag) {
                    part = part.toLowerCase()
                }
                for (var i = 0, l = checkSet.length, elem; i < l; i++) {
                    if ((elem = checkSet[i])) {
                        while ((elem = elem.previousSibling) && elem.nodeType !== 1) {
                        }
                        checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part
                    }
                }
                if (isPartStrNotTag) {
                    Sizzle.filter(part, checkSet, true)
                }
            }, ">": function(checkSet, part) {
                var elem, isPartStr = typeof part === "string", i = 0, l = checkSet.length;
                if (isPartStr && !rnonWord.test(part)) {
                    part = part.toLowerCase();
                    for (; i < l; i++) {
                        elem = checkSet[i];
                        if (elem) {
                            var parent = elem.parentNode;
                            checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false
                        }
                    }
                } else {
                    for (; i < l; i++) {
                        elem = checkSet[i];
                        if (elem) {
                            checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part
                        }
                    }
                    if (isPartStr) {
                        Sizzle.filter(part, checkSet, true)
                    }
                }
            }, "": function(checkSet, part, xml) {
                dirCheck("parentNode", checkSet, part, xml)
            }, "~": function(checkSet, part, xml) {
                dirCheck("previousSibling", checkSet, part, xml)
            }}, find: {ID: assertGetIdNotName ? function(match, context, xml) {
                if (typeof context.getElementById !== strundefined && !xml) {
                    var m = context.getElementById(match[1]);
                    return m && m.parentNode ? [m] : []
                }
            } : function(match, context, xml) {
                if (typeof context.getElementById !== strundefined && !xml) {
                    var m = context.getElementById(match[1]);
                    return m ? m.id === match[1] || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []
                }
            }, NAME: function(match, context) {
                if (typeof context.getElementsByName !== strundefined) {
                    var ret = [], results = context.getElementsByName(match[1]), i = 0, len = results.length;
                    for (; i < len; i++) {
                        if (results[i].getAttribute("name") === match[1]) {
                            ret.push(results[i])
                        }
                    }
                    return ret.length === 0 ? null : ret
                }
            }, TAG: assertTagNameNoComments ? function(match, context) {
                if (typeof context.getElementsByTagName !== strundefined) {
                    return context.getElementsByTagName(match[1])
                }
            } : function(match, context) {
                var results = context.getElementsByTagName(match[1]);
                if (match[1] === "*") {
                    var tmp = [], i = 0;
                    for (; results[i]; i++) {
                        if (results[i].nodeType === 1) {
                            tmp.push(results[i])
                        }
                    }
                    results = tmp
                }
                return results
            }}, preFilter: {CLASS: function(match, curLoop, inplace, result, not, xml) {
                match = " " + match[1].replace(rbackslash, "") + " ";
                if (xml) {
                    return match
                }
                for (var i = 0, elem; (elem = curLoop[i]) != null; i++) {
                    if (elem) {
                        if (not ^ (elem.className && (" " + elem.className + " ").replace(rtnfr, " ").indexOf(match) >= 0)) {
                            if (!inplace) {
                                result.push(elem)
                            }
                        } else if (inplace) {
                            curLoop[i] = false
                        }
                    }
                }
                return false
            }, ID: function(match) {
                return match[1].replace(rbackslash, "")
            }, TAG: function(match, curLoop) {
                return match[1].replace(rbackslash, "").toLowerCase()
            }, CHILD: function(match) {
                if (match[1] === "nth") {
                    if (!match[2]) {
                        Sizzle.error(match[0])
                    }
                    match[2] = match[2].replace(radjacent, "");
                    var test = rnth.exec(match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !rnonDigit.test(match[2]) && "0n+" + match[2] || match[2]);
                    match[2] = (test[1] + (test[2] || 1)) - 0;
                    match[3] = test[3] - 0
                } else if (match[2]) {
                    Sizzle.error(match[0])
                }
                match[0] = done++;
                return match
            }, ATTR: function(match, curLoop, inplace, result, not, xml) {
                var name = match[1] = match[1].replace(rbackslash, "");
                if (!xml && Expr.attrMap[name]) {
                    match[1] = Expr.attrMap[name]
                }
                match[4] = (match[4] || match[5] || "").replace(rbackslash, "");
                if (match[2] === "~=") {
                    match[4] = " " + match[4] + " "
                }
                return match
            }, PSEUDO: function(match, curLoop, inplace, result, not, xml) {
                if (match[1] === "not") {
                    if ((chunker.exec(match[3]) || "").length > 1 || rstartsWithWord.test(match[3])) {
                        match[3] = select(match[3], document, [], curLoop, xml)
                    } else {
                        var ret = Sizzle.filter(match[3], curLoop, inplace, !not);
                        if (!inplace) {
                            result.push.apply(result, ret)
                        }
                        return false
                    }
                } else if (matchExpr.POS.test(match[0]) || matchExpr.CHILD.test(match[0])) {
                    return true
                }
                return match
            }, POS: function(match) {
                match.unshift(true);
                return match
            }}, filters: {enabled: function(elem) {
                return elem.disabled === false
            }, disabled: function(elem) {
                return elem.disabled === true
            }, checked: function(elem) {
                var nodeName = elem.nodeName.toLowerCase();
                return(nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected)
            }, selected: function(elem) {
                if (elem.parentNode) {
                    elem.parentNode.selectedIndex
                }
                return elem.selected === true
            }, parent: function(elem) {
                return!!elem.firstChild
            }, empty: function(elem) {
                return!elem.firstChild
            }, has: function(elem, i, match) {
                return!!Sizzle(match[3], elem).length
            }, header: function(elem) {
                return rheader.test(elem.nodeName)
            }, text: function(elem) {
                var attr = elem.getAttribute("type"), type = elem.type;
                return elem.nodeName.toLowerCase() === "input" && "text" === type && (attr === null || attr.toLowerCase() === type)
            }, radio: function(elem) {
                return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type
            }, checkbox: function(elem) {
                return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type
            }, file: function(elem) {
                return elem.nodeName.toLowerCase() === "input" && "file" === elem.type
            }, password: function(elem) {
                return elem.nodeName.toLowerCase() === "input" && "password" === elem.type
            }, submit: function(elem) {
                var name = elem.nodeName.toLowerCase();
                return(name === "input" || name === "button") && "submit" === elem.type
            }, image: function(elem) {
                return elem.nodeName.toLowerCase() === "input" && "image" === elem.type
            }, reset: function(elem) {
                var name = elem.nodeName.toLowerCase();
                return(name === "input" || name === "button") && "reset" === elem.type
            }, button: function(elem) {
                var name = elem.nodeName.toLowerCase();
                return name === "input" && "button" === elem.type || name === "button"
            }, input: function(elem) {
                return rinputs.test(elem.nodeName)
            }, focus: function(elem) {
                var doc = elem.ownerDocument;
                return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href)
            }, active: function(elem) {
                return elem === elem.ownerDocument.activeElement
            }, contains: function(elem, i, match) {
                return(elem.textContent || elem.innerText || getText(elem)).indexOf(match[3]) >= 0
            }}, setFilters: {first: function(elem, i) {
                return i === 0
            }, last: function(elem, i, match, array) {
                return i === array.length - 1
            }, even: function(elem, i) {
                return i % 2 === 0
            }, odd: function(elem, i) {
                return i % 2 === 1
            }, lt: function(elem, i, match) {
                return i < match[3] - 0
            }, gt: function(elem, i, match) {
                return i > match[3] - 0
            }, nth: function(elem, i, match) {
                return match[3] - 0 === i
            }, eq: function(elem, i, match) {
                return match[3] - 0 === i
            }}, filter: {PSEUDO: function(elem, match, i, array) {
                var name = match[1], filter = Expr.filters[name];
                if (filter) {
                    return filter(elem, i, match, array)
                } else if (name === "not") {
                    var not = match[3], j = 0, len = not.length;
                    for (; j < len; j++) {
                        if (not[j] === elem) {
                            return false
                        }
                    }
                    return true
                } else {
                    Sizzle.error(name)
                }
            }, CHILD: function(elem, match) {
                var first, last, doneName, parent, cache, count, diff, type = match[1], node = elem;
                switch (type) {
                    case"only":
                    case"first":
                        while ((node = node.previousSibling)) {
                            if (node.nodeType === 1) {
                                return false
                            }
                        }
                        if (type === "first") {
                            return true
                        }
                        node = elem;
                    case"last":
                        while ((node = node.nextSibling)) {
                            if (node.nodeType === 1) {
                                return false
                            }
                        }
                        return true;
                    case"nth":
                        first = match[2];
                        last = match[3];
                        if (first === 1 && last === 0) {
                            return true
                        }
                        doneName = match[0];
                        parent = elem.parentNode;
                        if (parent && (parent[expando] !== doneName || !elem.nodeIndex)) {
                            count = 0;
                            for (node = parent.firstChild; node; node = node.nextSibling) {
                                if (node.nodeType === 1) {
                                    node.nodeIndex = ++count
                                }
                            }
                            parent[expando] = doneName
                        }
                        diff = elem.nodeIndex - last;
                        if (first === 0) {
                            return diff === 0
                        } else {
                            return(diff % first === 0 && diff / first >= 0)
                        }
                    }
            }, ID: assertGetIdNotName ? function(elem, match) {
                return elem.nodeType === 1 && elem.getAttribute("id") === match
            } : function(elem, match) {
                var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
                return elem.nodeType === 1 && node && node.nodeValue === match
            }, TAG: function(elem, match) {
                return(match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match
            }, CLASS: function(elem, match) {
                return(" " + (elem.className || elem.getAttribute("class")) + " ").indexOf(match) > -1
            }, ATTR: function(elem, match) {
                var name = match[1], result = Sizzle.attr ? Sizzle.attr(elem, name) : Expr.attrHandle[name] ? Expr.attrHandle[name](elem) : elem[name] != null ? elem[name] : elem.getAttribute(name), value = result + "", type = match[2], check = match[4];
                return result == null ? type === "!=" : !type && Sizzle.attr ? result != null : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false
            }, POS: function(elem, match, i, array) {
                var name = match[2], filter = Expr.setFilters[name];
                if (filter) {
                    return filter(elem, i, match, array)
                }
            }}};
    if (assertUsableClassName) {
        Expr.order.splice(1, 0, "CLASS");
        Expr.find.CLASS = function(match, context, xml) {
            if (typeof context.getElementsByClassName !== strundefined && !xml) {
                return context.getElementsByClassName(match[1])
            }
        }
    }
    var sortOrder, siblingCheck;
    if (docElem.compareDocumentPosition) {
        sortOrder = function(a, b) {
            if (a === b) {
                hasDuplicate = true;
                return 0
            }
            if (!a.compareDocumentPosition || !b.compareDocumentPosition) {
                return a.compareDocumentPosition ? -1 : 1
            }
            return a.compareDocumentPosition(b) & 4 ? -1 : 1
        }
    } else {
        sortOrder = function(a, b) {
            if (a === b) {
                hasDuplicate = true;
                return 0
            } else if (a.sourceIndex && b.sourceIndex) {
                return a.sourceIndex - b.sourceIndex
            }
            var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup;
            if (aup === bup) {
                return siblingCheck(a, b)
            } else if (!aup) {
                return-1
            } else if (!bup) {
                return 1
            }
            while (cur) {
                ap.unshift(cur);
                cur = cur.parentNode
            }
            cur = bup;
            while (cur) {
                bp.unshift(cur);
                cur = cur.parentNode
            }
            al = ap.length;
            bl = bp.length;
            for (var i = 0; i < al && i < bl; i++) {
                if (ap[i] !== bp[i]) {
                    return siblingCheck(ap[i], bp[i])
                }
            }
            return i === al ? siblingCheck(a, bp[i], -1) : siblingCheck(ap[i], b, 1)
        };
        siblingCheck = function(a, b, ret) {
            if (a === b) {
                return ret
            }
            var cur = a.nextSibling;
            while (cur) {
                if (cur === b) {
                    return-1
                }
                cur = cur.nextSibling
            }
            return 1
        }
    }
    if (document.querySelectorAll) {
        (function() {
            var oldSelect = select, id = "__sizzle__", rrelativeHierarchy = /^\s*[+~]/, rapostrophe = /'/g, rbuggyQSA = [];
            assert(function(div) {
                div.innerHTML = "<select><option selected></option></select>";
                if (!div.querySelectorAll("[selected]").length) {
                    rbuggyQSA.push("\\[[\\x20\\t\\n\\r\\f]*(?:checked|disabled|ismap|multiple|readonly|selected|value)")
                }
                if (!div.querySelectorAll(":checked").length) {
                    rbuggyQSA.push(":checked")
                }
            });
            assert(function(div) {
                div.innerHTML = "<p class=''></p>";
                if (div.querySelectorAll("[class^='']").length) {
                    rbuggyQSA.push("[*^$]=[\\x20\\t\\n\\r\\f]*(?:\"\"|'')")
                }
                div.innerHTML = "<input type='hidden'>";
                if (!div.querySelectorAll(":enabled").length) {
                    rbuggyQSA.push(":enabled", ":disabled")
                }
            });
            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
            select = function(selector, context, results, seed, contextXML) {
                if (!seed && !contextXML && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
                    if (context.nodeType === 9) {
                        try {
                            return makeArray(context.querySelectorAll(selector), results)
                        } catch (qsaError) {
                        }
                    } else if (context.nodeType === 1 && context.nodeName.toLowerCase() !== "object") {
                        var oldContext = context, old = context.getAttribute("id"), nid = old || id, parent = context.parentNode, relativeHierarchySelector = rrelativeHierarchy.test(selector);
                        if (!old) {
                            context.setAttribute("id", nid)
                        } else {
                            nid = nid.replace(rapostrophe, "\\$&")
                        }
                        if (relativeHierarchySelector && parent) {
                            context = parent
                        }
                        try {
                            if (!relativeHierarchySelector || parent) {
                                return makeArray(context.querySelectorAll("[id='" + nid + "'] " + selector), results)
                            }
                        } catch (qsaError) {
                        } finally {
                            if (!old) {
                                oldContext.removeAttribute("id")
                            }
                        }
                    }
                }
                return oldSelect(selector, context, results, seed, contextXML)
            }
        })()
    }
    function dirCheck(dir, checkSet, part, xml) {
        var elem, match, isElem, nodeCheck, doneName = done++, i = 0, len = checkSet.length;
        if (typeof part === "string" && !rnonWord.test(part)) {
            part = part.toLowerCase();
            nodeCheck = part
        }
        for (; i < len; i++) {
            elem = checkSet[i];
            if (elem) {
                match = false;
                elem = elem[dir];
                while (elem) {
                    if (elem[expando] === doneName) {
                        match = checkSet[elem.sizset];
                        break
                    }
                    isElem = elem.nodeType === 1;
                    if (isElem && !xml) {
                        elem[expando] = doneName;
                        elem.sizset = i
                    }
                    if (nodeCheck) {
                        if (elem.nodeName.toLowerCase() === part) {
                            match = elem;
                            break
                        }
                    } else if (isElem) {
                        if (typeof part !== "string") {
                            if (elem === part) {
                                match = true;
                                break
                            }
                        } else if (Sizzle.filter(part, [elem]).length > 0) {
                            match = elem;
                            break
                        }
                    }
                    elem = elem[dir]
                }
                checkSet[i] = match
            }
        }
    }
    var posProcess = function(selector, context, seed, contextXML) {
        var match, tmpSet = [], later = "", root = context.nodeType ? [context] : context, i = 0, len = root.length;
        while ((match = matchExpr.PSEUDO.exec(selector))) {
            later += match[0];
            selector = selector.replace(matchExpr.PSEUDO, "")
        }
        if (Expr.relative[selector]) {
            selector += "*"
        }
        for (; i < len; i++) {
            select(selector, root[i], tmpSet, seed, contextXML)
        }
        return Sizzle.filter(later, tmpSet)
    };
    window.Sizzle = Sizzle
})(window);

//jquery.uploadify.v2.1.4.min.js
var swfobject = function() {
    var D = "undefined", r = "object", S = "Shockwave Flash", W = "ShockwaveFlash.ShockwaveFlash", q = "application/x-shockwave-flash", R = "SWFObjectExprInst", x = "onreadystatechange", O = window, j = document, t = navigator, T = false, U = [h], o = [], N = [], I = [], l, Q, E, B, J = false, a = false, n, G, m = true, M = function() {
        var aa = typeof j.getElementById != D && typeof j.getElementsByTagName != D && typeof j.createElement != D, ah = t.userAgent.toLowerCase(), Y = t.platform.toLowerCase(), ae = Y ? /win/.test(Y) : /win/.test(ah), ac = Y ? /mac/.test(Y) : /mac/.test(ah), af = /webkit/.test(ah) ? parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, X = !+"\v1", ag = [0, 0, 0], ab = null;
        if (typeof t.plugins != D && typeof t.plugins[S] == r) {
            ab = t.plugins[S].description;
            if (ab && !(typeof t.mimeTypes != D && t.mimeTypes[q] && !t.mimeTypes[q].enabledPlugin)) {
                T = true;
                X = false;
                ab = ab.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                ag[0] = parseInt(ab.replace(/^(.*)\..*$/, "$1"), 10);
                ag[1] = parseInt(ab.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
                ag[2] = /[a-zA-Z]/.test(ab) ? parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0
            }
        } else {
            if (typeof O.ActiveXObject != D) {
                try {
                    var ad = new ActiveXObject(W);
                    if (ad) {
                        ab = ad.GetVariable("$version");
                        if (ab) {
                            X = true;
                            ab = ab.split(" ")[1].split(",");
                            ag = [parseInt(ab[0], 10), parseInt(ab[1], 10), parseInt(ab[2], 10)]
                        }
                    }
                } catch (Z) {
                }
            }
        }
        return{w3: aa, pv: ag, wk: af, ie: X, win: ae, mac: ac}
    }(), k = function() {
        if (!M.w3) {
            return
        }
        if ((typeof j.readyState != D && j.readyState == "complete") || (typeof j.readyState == D && (j.getElementsByTagName("body")[0] || j.body))) {
            f()
        }
        if (!J) {
            if (typeof j.addEventListener != D) {
                j.addEventListener("DOMContentLoaded", f, false)
            }
            if (M.ie && M.win) {
                j.attachEvent(x, function() {
                    if (j.readyState == "complete") {
                        j.detachEvent(x, arguments.callee);
                        f()
                    }
                });
                if (O == top) {
                    (function() {
                        if (J) {
                            return
                        }
                        try {
                            j.documentElement.doScroll("left")
                        } catch (X) {
                            setTimeout(arguments.callee, 0);
                            return
                        }
                        f()
                    })()
                }
            }
            if (M.wk) {
                (function() {
                    if (J) {
                        return
                    }
                    if (!/loaded|complete/.test(j.readyState)) {
                        setTimeout(arguments.callee, 0);
                        return
                    }
                    f()
                })()
            }
            s(f)
        }
    }();
    function f() {
        if (J) {
            return
        }
        try {
            var Z = j.getElementsByTagName("body")[0].appendChild(C("span"));
            Z.parentNode.removeChild(Z)
        } catch (aa) {
            return
        }
        J = true;
        var X = U.length;
        for (var Y = 0; Y < X; Y++) {
            U[Y]()
        }
    }
    function K(X) {
        if (J) {
            X()
        } else {
            U[U.length] = X
        }
    }
    function s(Y) {
        if (typeof O.addEventListener != D) {
            O.addEventListener("load", Y, false)
        } else {
            if (typeof j.addEventListener != D) {
                j.addEventListener("load", Y, false)
            } else {
                if (typeof O.attachEvent != D) {
                    i(O, "onload", Y)
                } else {
                    if (typeof O.onload == "function") {
                        var X = O.onload;
                        O.onload = function() {
                            X();
                            Y()
                        }
                    } else {
                        O.onload = Y
                    }
                }
            }
        }
    }
    function h() {
        if (T) {
            V()
        } else {
            H()
        }
    }
    function V() {
        var X = j.getElementsByTagName("body")[0];
        var aa = C(r);
        aa.setAttribute("type", q);
        var Z = X.appendChild(aa);
        if (Z) {
            var Y = 0;
            (function() {
                if (typeof Z.GetVariable != D) {
                    var ab = Z.GetVariable("$version");
                    if (ab) {
                        ab = ab.split(" ")[1].split(",");
                        M.pv = [parseInt(ab[0], 10), parseInt(ab[1], 10), parseInt(ab[2], 10)]
                    }
                } else {
                    if (Y < 10) {
                        Y++;
                        setTimeout(arguments.callee, 10);
                        return
                    }
                }
                X.removeChild(aa);
                Z = null;
                H()
            })()
        } else {
            H()
        }
    }
    function H() {
        var ag = o.length;
        if (ag > 0) {
            for (var af = 0; af < ag; af++) {
                var Y = o[af].id;
                var ab = o[af].callbackFn;
                var aa = {success: false, id: Y};
                if (M.pv[0] > 0) {
                    var ae = c(Y);
                    if (ae) {
                        if (F(o[af].swfVersion) && !(M.wk && M.wk < 312)) {
                            w(Y, true);
                            if (ab) {
                                aa.success = true;
                                aa.ref = z(Y);
                                ab(aa)
                            }
                        } else {
                            if (o[af].expressInstall && A()) {
                                var ai = {};
                                ai.data = o[af].expressInstall;
                                ai.width = ae.getAttribute("width") || "0";
                                ai.height = ae.getAttribute("height") || "0";
                                if (ae.getAttribute("class")) {
                                    ai.styleclass = ae.getAttribute("class")
                                }
                                if (ae.getAttribute("align")) {
                                    ai.align = ae.getAttribute("align")
                                }
                                var ah = {};
                                var X = ae.getElementsByTagName("param");
                                var ac = X.length;
                                for (var ad = 0; ad < ac; ad++) {
                                    if (X[ad].getAttribute("name").toLowerCase() != "movie") {
                                        ah[X[ad].getAttribute("name")] = X[ad].getAttribute("value")
                                    }
                                }
                                P(ai, ah, Y, ab)
                            } else {
                                p(ae);
                                if (ab) {
                                    ab(aa)
                                }
                            }
                        }
                    }
                } else {
                    w(Y, true);
                    if (ab) {
                        var Z = z(Y);
                        if (Z && typeof Z.SetVariable != D) {
                            aa.success = true;
                            aa.ref = Z
                        }
                        ab(aa)
                    }
                }
            }
        }
    }
    function z(aa) {
        var X = null;
        var Y = c(aa);
        if (Y && Y.nodeName == "OBJECT") {
            if (typeof Y.SetVariable != D) {
                X = Y
            } else {
                var Z = Y.getElementsByTagName(r)[0];
                if (Z) {
                    X = Z
                }
            }
        }
        return X
    }
    function A() {
        return !a && F("6.0.65") && (M.win || M.mac) && !(M.wk && M.wk < 312)
    }
    function P(aa, ab, X, Z) {
        a = true;
        E = Z || null;
        B = {success: false, id: X};
        var ae = c(X);
        if (ae) {
            if (ae.nodeName == "OBJECT") {
                l = g(ae);
                Q = null
            } else {
                l = ae;
                Q = X
            }
            aa.id = R;
            if (typeof aa.width == D || (!/%$/.test(aa.width) && parseInt(aa.width, 10) < 310)) {
                aa.width = "310"
            }
            if (typeof aa.height == D || (!/%$/.test(aa.height) && parseInt(aa.height, 10) < 137)) {
                aa.height = "137"
            }
            j.title = j.title.slice(0, 47) + " - Flash Player Installation";
            var ad = M.ie && M.win ? "ActiveX" : "PlugIn", ac = "MMredirectURL=" + O.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + ad + "&MMdoctitle=" + j.title;
            if (typeof ab.flashvars != D) {
                ab.flashvars += "&" + ac
            } else {
                ab.flashvars = ac
            }
            if (M.ie && M.win && ae.readyState != 4) {
                var Y = C("div");
                X += "SWFObjectNew";
                Y.setAttribute("id", X);
                ae.parentNode.insertBefore(Y, ae);
                ae.style.display = "none";
                (function() {
                    if (ae.readyState == 4) {
                        ae.parentNode.removeChild(ae)
                    } else {
                        setTimeout(arguments.callee, 10)
                    }
                })()
            }
            u(aa, ab, X)
        }
    }
    function p(Y) {
        if (M.ie && M.win && Y.readyState != 4) {
            var X = C("div");
            Y.parentNode.insertBefore(X, Y);
            X.parentNode.replaceChild(g(Y), X);
            Y.style.display = "none";
            (function() {
                if (Y.readyState == 4) {
                    Y.parentNode.removeChild(Y)
                } else {
                    setTimeout(arguments.callee, 10)
                }
            })()
        } else {
            Y.parentNode.replaceChild(g(Y), Y)
        }
    }
    function g(ab) {
        var aa = C("div");
        if (M.win && M.ie) {
            aa.innerHTML = ab.innerHTML
        } else {
            var Y = ab.getElementsByTagName(r)[0];
            if (Y) {
                var ad = Y.childNodes;
                if (ad) {
                    var X = ad.length;
                    for (var Z = 0; Z < X; Z++) {
                        if (!(ad[Z].nodeType == 1 && ad[Z].nodeName == "PARAM") && !(ad[Z].nodeType == 8)) {
                            aa.appendChild(ad[Z].cloneNode(true))
                        }
                    }
                }
            }
        }
        return aa
    }
    function u(ai, ag, Y) {
        var X, aa = c(Y);
        if (M.wk && M.wk < 312) {
            return X
        }
        if (aa) {
            if (typeof ai.id == D) {
                ai.id = Y
            }
            if (M.ie && M.win) {
                var ah = "";
                for (var ae in ai) {
                    if (ai[ae] != Object.prototype[ae]) {
                        if (ae.toLowerCase() == "data") {
                            ag.movie = ai[ae]
                        } else {
                            if (ae.toLowerCase() == "styleclass") {
                                ah += ' class="' + ai[ae] + '"'
                            } else {
                                if (ae.toLowerCase() != "classid") {
                                    ah += " " + ae + '="' + ai[ae] + '"'
                                }
                            }
                        }
                    }
                }
                var af = "";
                for (var ad in ag) {
                    if (ag[ad] != Object.prototype[ad]) {
                        af += '<param name="' + ad + '" value="' + ag[ad] + '" />'
                    }
                }
                aa.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + ah + ">" + af + "</object>";
                N[N.length] = ai.id;
                X = c(ai.id)
            } else {
                var Z = C(r);
                Z.setAttribute("type", q);
                for (var ac in ai) {
                    if (ai[ac] != Object.prototype[ac]) {
                        if (ac.toLowerCase() == "styleclass") {
                            Z.setAttribute("class", ai[ac])
                        } else {
                            if (ac.toLowerCase() != "classid") {
                                Z.setAttribute(ac, ai[ac])
                            }
                        }
                    }
                }
                for (var ab in ag) {
                    if (ag[ab] != Object.prototype[ab] && ab.toLowerCase() != "movie") {
                        e(Z, ab, ag[ab])
                    }
                }
                aa.parentNode.replaceChild(Z, aa);
                X = Z
            }
        }
        return X
    }
    function e(Z, X, Y) {
        var aa = C("param");
        aa.setAttribute("name", X);
        aa.setAttribute("value", Y);
        Z.appendChild(aa)
    }
    function y(Y) {
        var X = c(Y);
        if (X && X.nodeName == "OBJECT") {
            if (M.ie && M.win) {
                X.style.display = "none";
                (function() {
                    if (X.readyState == 4) {
                        b(Y)
                    } else {
                        setTimeout(arguments.callee, 10)
                    }
                })()
            } else {
                X.parentNode.removeChild(X)
            }
        }
    }
    function b(Z) {
        var Y = c(Z);
        if (Y) {
            for (var X in Y) {
                if (typeof Y[X] == "function") {
                    Y[X] = null
                }
            }
            Y.parentNode.removeChild(Y)
        }
    }
    function c(Z) {
        var X = null;
        try {
            X = j.getElementById(Z)
        } catch (Y) {
        }
        return X
    }
    function C(X) {
        return j.createElement(X)
    }
    function i(Z, X, Y) {
        Z.attachEvent(X, Y);
        I[I.length] = [Z, X, Y]
    }
    function F(Z) {
        var Y = M.pv, X = Z.split(".");
        X[0] = parseInt(X[0], 10);
        X[1] = parseInt(X[1], 10) || 0;
        X[2] = parseInt(X[2], 10) || 0;
        return(Y[0] > X[0] || (Y[0] == X[0] && Y[1] > X[1]) || (Y[0] == X[0] && Y[1] == X[1] && Y[2] >= X[2])) ? true : false
    }
    function v(ac, Y, ad, ab) {
        if (M.ie && M.mac) {
            return
        }
        var aa = j.getElementsByTagName("head")[0];
        if (!aa) {
            return
        }
        var X = (ad && typeof ad == "string") ? ad : "screen";
        if (ab) {
            n = null;
            G = null
        }
        if (!n || G != X) {
            var Z = C("style");
            Z.setAttribute("type", "text/css");
            Z.setAttribute("media", X);
            n = aa.appendChild(Z);
            if (M.ie && M.win && typeof j.styleSheets != D && j.styleSheets.length > 0) {
                n = j.styleSheets[j.styleSheets.length - 1]
            }
            G = X
        }
        if (M.ie && M.win) {
            if (n && typeof n.addRule == r) {
                n.addRule(ac, Y)
            }
        } else {
            if (n && typeof j.createTextNode != D) {
                n.appendChild(j.createTextNode(ac + " {" + Y + "}"))
            }
        }
    }
    function w(Z, X) {
        if (!m) {
            return
        }
        var Y = X ? "visible" : "hidden";
        if (J && c(Z)) {
            c(Z).style.visibility = Y
        } else {
            v("#" + Z, "visibility:" + Y)
        }
    }
    function L(Y) {
        var Z = /[\\\"<>\.;]/;
        var X = Z.exec(Y) != null;
        return X && typeof encodeURIComponent != D ? encodeURIComponent(Y) : Y
    }
    var d = function() {
        if (M.ie && M.win) {
            window.attachEvent("onunload", function() {
                var ac = I.length;
                for (var ab = 0; ab < ac; ab++) {
                    I[ab][0].detachEvent(I[ab][1], I[ab][2])
                }
                var Z = N.length;
                for (var aa = 0; aa < Z; aa++) {
                    y(N[aa])
                }
                for (var Y in M) {
                    M[Y] = null
                }
                M = null;
                for (var X in swfobject) {
                    swfobject[X] = null
                }
                swfobject = null
            })
        }
    }();
    return{registerObject: function(ab, X, aa, Z) {
            if (M.w3 && ab && X) {
                var Y = {};
                Y.id = ab;
                Y.swfVersion = X;
                Y.expressInstall = aa;
                Y.callbackFn = Z;
                o[o.length] = Y;
                w(ab, false)
            } else {
                if (Z) {
                    Z({success: false, id: ab})
                }
            }
        }, getObjectById: function(X) {
            if (M.w3) {
                return z(X)
            }
        }, embedSWF: function(ab, ah, ae, ag, Y, aa, Z, ad, af, ac) {
            var X = {success: false, id: ah};
            if (M.w3 && !(M.wk && M.wk < 312) && ab && ah && ae && ag && Y) {
                w(ah, false);
                K(function() {
                    ae += "";
                    ag += "";
                    var aj = {};
                    if (af && typeof af === r) {
                        for (var al in af) {
                            aj[al] = af[al]
                        }
                    }
                    aj.data = ab;
                    aj.width = ae;
                    aj.height = ag;
                    var am = {};
                    if (ad && typeof ad === r) {
                        for (var ak in ad) {
                            am[ak] = ad[ak]
                        }
                    }
                    if (Z && typeof Z === r) {
                        for (var ai in Z) {
                            if (typeof am.flashvars != D) {
                                am.flashvars += "&" + ai + "=" + Z[ai]
                            } else {
                                am.flashvars = ai + "=" + Z[ai]
                            }
                        }
                    }
                    if (F(Y)) {
                        var an = u(aj, am, ah);
                        if (aj.id == ah) {
                            w(ah, true)
                        }
                        X.success = true;
                        X.ref = an
                    } else {
                        if (aa && A()) {
                            aj.data = aa;
                            P(aj, am, ah, ac);
                            return
                        } else {
                            w(ah, true)
                        }
                    }
                    if (ac) {
                        ac(X)
                    }
                })
            } else {
                if (ac) {
                    ac(X)
                }
            }
        }, switchOffAutoHideShow: function() {
            m = false
        }, ua: M, getFlashPlayerVersion: function() {
            return{major: M.pv[0], minor: M.pv[1], release: M.pv[2]}
        }, hasFlashPlayerVersion: F, createSWF: function(Z, Y, X) {
            if (M.w3) {
                return u(Z, Y, X)
            } else {
                return undefined
            }
        }, showExpressInstall: function(Z, aa, X, Y) {
            if (M.w3 && A()) {
                P(Z, aa, X, Y)
            }
        }, removeSWF: function(X) {
            if (M.w3) {
                y(X)
            }
        }, createCSS: function(aa, Z, Y, X) {
            if (M.w3) {
                v(aa, Z, Y, X)
            }
        }, addDomLoadEvent: K, addLoadEvent: s, getQueryParamValue: function(aa) {
            var Z = j.location.search || j.location.hash;
            if (Z) {
                if (/\?/.test(Z)) {
                    Z = Z.split("?")[1]
                }
                if (aa == null) {
                    return L(Z)
                }
                var Y = Z.split("&");
                for (var X = 0; X < Y.length; X++) {
                    if (Y[X].substring(0, Y[X].indexOf("=")) == aa) {
                        return L(Y[X].substring((Y[X].indexOf("=") + 1)))
                    }
                }
            }
            return""
        }, expressInstallCallback: function() {
            if (a) {
                var X = c(R);
                if (X && l) {
                    X.parentNode.replaceChild(l, X);
                    if (Q) {
                        w(Q, true);
                        if (M.ie && M.win) {
                            l.style.display = "block"
                        }
                    }
                    if (E) {
                        E(B)
                    }
                }
                a = false
            }
        }}
}();
if (jQuery) {
    (function(a) {
        a.extend(a.fn, {uploadify: function(b) {
                a(this).each(function() {
                    var f = a.extend({id: a(this).attr("id"), uploader: "uploadify.swf", script: "uploadify.php", expressInstall: null, folder: "", height: 30, width: 120, cancelImg: "cancel.png", wmode: "opaque", scriptAccess: "sameDomain", fileDataName: "Filedata", method: "POST", queueSizeLimit: 999, simUploadLimit: 1, queueID: false, displayData: "percentage", removeCompleted: true, onInit: function() {
                        }, onSelect: function() {
                        }, onSelectOnce: function() {
                        }, onQueueFull: function() {
                        }, onCheck: function() {
                        }, onCancel: function() {
                        }, onClearQueue: function() {
                        }, onError: function() {
                        }, onProgress: function() {
                        }, onComplete: function() {
                        }, onAllComplete: function() {
                        }}, b);
                    a(this).data("settings", f);
                    var e = location.pathname;
                    e = e.split("/");
                    e.pop();
                    e = e.join("/") + "/";
                    var g = {};
                    g.uploadifyID = f.id;
                    g.pagepath = e;
                    if (f.buttonImg) {
                        g.buttonImg = escape(f.buttonImg)
                    }
                    if (f.buttonText) {
                        g.buttonText = escape(f.buttonText)
                    }
                    if (f.rollover) {
                        g.rollover = true
                    }
                    g.script = f.script;
                    g.folder = escape(f.folder);
                    if (f.scriptData) {
                        var h = "";
                        for (var d in f.scriptData) {
                            h += "&" + d + "=" + f.scriptData[d]
                        }
                        g.scriptData = escape(h.substr(1))
                    }
                    g.width = f.width;
                    g.height = f.height;
                    g.wmode = f.wmode;
                    g.method = f.method;
                    g.queueSizeLimit = f.queueSizeLimit;
                    g.simUploadLimit = f.simUploadLimit;
                    if (f.hideButton) {
                        g.hideButton = true
                    }
                    if (f.fileDesc) {
                        g.fileDesc = f.fileDesc
                    }
                    if (f.fileExt) {
                        g.fileExt = f.fileExt
                    }
                    if (f.multi) {
                        g.multi = true
                    }
                    if (f.auto) {
                        g.auto = true
                    }
                    if (f.sizeLimit) {
                        g.sizeLimit = f.sizeLimit
                    }
                    if (f.checkScript) {
                        g.checkScript = f.checkScript
                    }
                    if (f.fileDataName) {
                        g.fileDataName = f.fileDataName
                    }
                    if (f.queueID) {
                        g.queueID = f.queueID
                    }
                    if (f.onInit() !== false) {
                        a(this).css("display", "none");
                        a(this).after('<div id="' + a(this).attr("id") + 'Uploader"></div>');
                        swfobject.embedSWF(f.uploader, f.id + "Uploader", f.width, f.height, "9.0.24", f.expressInstall, g, {quality: "high", wmode: f.wmode, allowScriptAccess: f.scriptAccess}, {}, function(i) {
                            if (typeof (f.onSWFReadyFall) == "function" && !i.success) {
                                f.onSWFReadyFall()
                            }
                        });
                        if (f.queueID == false) {
                            a("#" + a(this).attr("id") + "Uploader").after('<div id="' + a(this).attr("id") + 'Queue" class="uploadifyQueue"></div>')
                        } else {
                            a("#" + f.queueID).addClass("uploadifyQueue")
                        }
                    }
                    if (typeof (f.onOpen) == "function") {
                        a(this).bind("uploadifyOpen", f.onOpen)
                    }
                    a(this).bind("uploadifySelect", {action: f.onSelect, queueID: f.queueID}, function(k, i, j) {
                        if (k.data.action(k, i, j) !== false) {
                            var l = Math.round(j.size / 1024 * 100) * 0.01;
                            var m = "KB";
                            if (l > 1000) {
                                l = Math.round(l * 0.001 * 100) * 0.01;
                                m = "MB"
                            }
                            var n = l.toString().split(".");
                            if (n.length > 1) {
                                l = n[0] + "." + n[1].substr(0, 2)
                            } else {
                                l = n[0]
                            }
                            if (j.name.length > 20) {
                                fileName = j.name.substr(0, 20) + "..."
                            } else {
                                fileName = j.name
                            }
                            queue = "#" + a(this).attr("id") + "Queue";
                            if (k.data.queueID) {
                                queue = "#" + k.data.queueID
                            }
                            a(queue).append('<div id="' + a(this).attr("id") + i + '" class="uploadifyQueueItem"><div class="cancel"><a href="javascript:jQuery(\'#' + a(this).attr("id") + "').uploadifyCancel('" + i + '\')"><img src="' + f.cancelImg + '" border="0" /></a></div><span class="fileName">' + fileName + " (" + l + m + ')</span><span class="percentage"></span><div class="uploadifyProgress"><div id="' + a(this).attr("id") + i + 'ProgressBar" class="uploadifyProgressBar"><!--Progress Bar--></div></div></div>')
                        }
                    });
                    a(this).bind("uploadifySelectOnce", {action: f.onSelectOnce}, function(i, j) {
                        i.data.action(i, j);
                        if (f.auto) {
                            if (f.checkScript) {
                                a(this).uploadifyUpload(null, false)
                            } else {
                                a(this).uploadifyUpload(null, true)
                            }
                        }
                    });
                    a(this).bind("uploadifyQueueFull", {action: f.onQueueFull}, function(i, j) {
                        if (i.data.action(i, j) !== false) {
                            alert("队列已满。一次最多只能上传 " + j + " 文件。")
                        }
                    });
                    a(this).bind("uploadifyCheckExist", {action: f.onCheck}, function(n, m, l, k, p) {
                        var j = new Object();
                        j = l;
                        j.folder = (k.substr(0, 1) == "/") ? k : e + k;
                        if (p) {
                            for (var i in l) {
                                var o = i
                            }
                        }
                        a.post(m, j, function(s) {
                            for (var q in s) {
                                if (n.data.action(n, s, q) !== false) {
                                    var r = confirm("Do you want to replace the file " + s[q] + "?");
                                    if (!r) {
                                        document.getElementById(a(n.target).attr("id") + "Uploader").cancelFileUpload(q, true, true)
                                    }
                                }
                            }
                            if (p) {
                                document.getElementById(a(n.target).attr("id") + "Uploader").startFileUpload(o, true)
                            } else {
                                document.getElementById(a(n.target).attr("id") + "Uploader").startFileUpload(null, true)
                            }
                        }, "json")
                    });
                    a(this).bind("uploadifyCancel", {action: f.onCancel}, function(n, j, m, o, i, l) {
                        if (n.data.action(n, j, m, o, l) !== false) {
                            if (i) {
                                var k = (l == true) ? 0 : 250;
                                a("#" + a(this).attr("id") + j).fadeOut(k, function() {
                                    a(this).remove()
                                })
                            }
                        }
                    });
                    a(this).bind("uploadifyClearQueue", {action: f.onClearQueue}, function(k, j) {
                        var i = (f.queueID) ? f.queueID : a(this).attr("id") + "Queue";
                        if (j) {
                            a("#" + i).find(".uploadifyQueueItem").remove()
                        }
                        if (k.data.action(k, j) !== false) {
                            a("#" + i).find(".uploadifyQueueItem").each(function() {
                                var l = a(".uploadifyQueueItem").index(this);
                                a(this).delay(l * 100).fadeOut(250, function() {
                                    a(this).remove()
                                })
                            })
                        }
                    });
                    var c = [];
                    a(this).bind("uploadifyError", {action: f.onError}, function(m, i, l, k) {
                        if (m.data.action(m, i, l, k) !== false) {
                            var j = new Array(i, l, k);
                            c.push(j);
                            a("#" + a(this).attr("id") + i).find(".percentage").text(" - " + k.type + " Error");
                            a("#" + a(this).attr("id") + i).find(".uploadifyProgress").hide();
                            a("#" + a(this).attr("id") + i).addClass("uploadifyError")
                        }
                    });
                    if (typeof (f.onUpload) == "function") {
                        a(this).bind("uploadifyUpload", f.onUpload)
                    }
                    a(this).bind("uploadifyProgress", {action: f.onProgress, toDisplay: f.displayData}, function(k, i, j, l) {
                        if (k.data.action(k, i, j, l) !== false) {
                            a("#" + a(this).attr("id") + i + "ProgressBar").animate({width: l.percentage + "%"}, 250, function() {
                                if (l.percentage == 100) {
                                    a(this).closest(".uploadifyProgress").fadeOut(250, function() {
                                        a(this).remove()
                                    })
                                }
                            });
                            if (k.data.toDisplay == "percentage") {
                                displayData = " - " + l.percentage + "%"
                            }
                            if (k.data.toDisplay == "speed") {
                                displayData = " - " + l.speed + "KB/s"
                            }
                            if (k.data.toDisplay == null) {
                                displayData = " "
                            }
                            a("#" + a(this).attr("id") + i).find(".percentage").text(displayData)
                        }
                    });
                    a(this).bind("uploadifyComplete", {action: f.onComplete}, function(l, i, k, j, m) {
                        if (l.data.action(l, i, k, unescape(j), m) !== false) {
                            a("#" + a(this).attr("id") + i).find(".percentage").text(" - Completed");
                            if (f.removeCompleted) {
                                a("#" + a(l.target).attr("id") + i).fadeOut(250, function() {
                                    a(this).remove()
                                })
                            }
                            a("#" + a(l.target).attr("id") + i).addClass("completed")
                        }
                    });
                    if (typeof (f.onAllComplete) == "function") {
                        a(this).bind("uploadifyAllComplete", {action: f.onAllComplete}, function(i, j) {
                            if (i.data.action(i, j) !== false) {
                                c = []
                            }
                        })
                    }
                })
            }, uploadifySettings: function(f, j, c) {
                var g = false;
                a(this).each(function() {
                    if (f == "scriptData" && j != null) {
                        if (c) {
                            var i = j
                        } else {
                            var i = a.extend(a(this).data("settings").scriptData, j)
                        }
                        var l = "";
                        for (var k in i) {
                            l += "&" + k + "=" + i[k]
                        }
                        j = escape(l.substr(1))
                    }
                    g = document.getElementById(a(this).attr("id") + "Uploader").updateSettings(f, j)
                });
                if (j == null) {
                    if (f == "scriptData") {
                        var b = unescape(g).split("&");
                        var e = new Object();
                        for (var d = 0; d < b.length; d++) {
                            var h = b[d].split("=");
                            e[h[0]] = h[1]
                        }
                        g = e
                    }
                }
                return g
            }, uploadifyUpload: function(b, c) {
                a(this).each(function() {
                    if (!c) {
                        c = false
                    }
                    document.getElementById(a(this).attr("id") + "Uploader").startFileUpload(b, c)
                })
            }, uploadifyCancel: function(b) {
                a(this).each(function() {
                    document.getElementById(a(this).attr("id") + "Uploader").cancelFileUpload(b, true, true, false)
                })
            }, uploadifyClearQueue: function() {
                a(this).each(function() {
                    document.getElementById(a(this).attr("id") + "Uploader").clearFileUploadQueue(false)
                })
            }})
    })(jQuery)
}
;

//rotate.js
(function($) {
    $.fn.artZoom = function() {
        $(this).live('click', function() {
            if ($(this).hasClass('artZoomAll')) {
                var aRevv = $(this).attr('rev');
                var parentId = 'image_area_' + aRevv;
                var tidv = (aRevv.substr(0, aRevv.indexOf('_')));
                if (($.trim(($('#reply_area_' + tidv).html()))).length < 1) {
                    $('#topic_list_reply_' + tidv + '_aid').click()
                }
                if ($("#" + parentId + " a.artZoomAll").length > 1) {
                    $("#" + parentId + " a.artZoomAll").each(function() {
                        clickOne($(this), parentId)
                    });
                    return false
                }
            }
            clickOne($(this));
            return false
        });
        var clickOne = function(aObj, parentId) {
            var maxImg = $(aObj).attr('href'), viewImg = $(aObj).attr('rel').length === '0' ? $(this).attr('rel') : maxImg;
            if ($(aObj).find('.loading').length == 0) {
                $(aObj).append('<span class="loading" title="Loading..">Loading..</span>')
            }
            imgTool($(aObj), maxImg, viewImg, parentId)
        };
        var loadImg = function(url, fn) {
            var img = new Image();
            img.src = url;
            if (img.complete) {
                fn.call(img)
            } else {
                img.onload = function() {
                    fn.call(img)
                }
            }
        };
        var imgTool = function(on, maxImg, viewImg, parentId) {
            var width = 0, height = 0, tool = function() {
                on.find('.loading').remove();
                on.hide();
                var parentInnerWidth = on.parent().innerWidth();
                if (parentInnerWidth < 120) {
                    parentInnerWidth = 460
                }
                var maxWidth = parentInnerWidth - 12;
                if (width > maxWidth) {
                    height = maxWidth / width * height;
                    width = maxWidth
                }
                ;
                if ($(on).hasClass('artZoom2')) {
                    var html = '<div class="artZoomBox"><div class="tool"><a class="imgLeft" href="#" title="向左转">向左转</a><a class="imgRight" href="#" title="向右转">向右转</a><a class="viewImg" href="' + viewImg + '" title="查看原图">查看原图</a></div><a href="' + viewImg + '"> <img class="maxImg" width="' + width + '" height="' + height + '" src="' + maxImg + '" /></a></div>'
                } else if ($(on).hasClass('artZoom3')) {
                    var html = '<div class="artZoomBox"><div class="tool"><a class="imgLeft" href="#" title="向左转">向左转</a><a class="imgRight" href="#" title="向右转">向右转</a><a class="viewImg" href="' + viewImg + '" title="查看原图">查看原图</a></div><a rev="' + aRevv + '" href="' + viewImg + '" class="maxImgLink3"> <img class="maxImg" width="' + width + '" height="' + height + '" src="' + maxImg + '" /></a></div>'
                } else if ($(on).hasClass('artZoomAll')) {
                    var html = '<div class="artZoomBox"><div class="tool"><a class="imgLeft" href="#" title="向左转">向左转</a><a class="imgRight" href="#" title="向右转">向右转</a><a class="viewImg" href="' + viewImg + '" title="查看原图">查看原图</a></div><a href="' + viewImg + '" class="maxImgLinkAll"> <img class="maxImg" width="' + width + '" height="' + height + '" src="' + maxImg + '" /></a></div>'
                } else {
                    var html = '<div class="artZoomBox"><div class="tool"><a class="hideImg" href="#" title="收起">收起</a><a class="imgLeft" href="#" title="向左转">向左转</a><a class="imgRight" href="#" title="向右转">向右转</a><a class="viewImg" href="' + viewImg + '" title="查看原图">查看原图</a></div><a href="' + viewImg + '" class="maxImgLink"> <img class="maxImg" width="' + width + '" height="' + height + '" src="' + maxImg + '" /></a></div>'
                }
                if (on.next('.artZoomBox').length < 1) {
                    on.after(html)
                }
                var box = on.next('.artZoomBox');
                box.hover(function() {
                    box.addClass('js_hover')
                }, function() {
                    box.removeClass('js_hover')
                });
                box.find('a').unbind();
                box.find('a').bind('click', function() {
                    if ($(this).hasClass('maxImgLink3') && 'undefined' != typeof (aRevv)) {
                        view_topic_content(aRevv, aSidv, aTPT_v)
                    }
                    ;
                    if ($(this).hasClass('maxImgLinkAll')) {
                        if ($('#' + parentId + ' .artZoomBox').length > 1) {
                            $('#' + parentId + ' .artZoomBox').each(function() {
                                $(this).hide();
                                $(this).prev().show()
                            });
                            window.location.hash = parentId
                        } else {
                            box.hide();
                            box.prev().show()
                        }
                    }
                    ;
                    if ($(this).hasClass('hideImg') || $(this).hasClass('maxImgLink')) {
                        box.hide();
                        box.prev().show()
                    }
                    ;
                    if ($(this).hasClass('imgLeft')) {
                        box.find('.maxImg').rotate('left')
                    }
                    ;
                    if ($(this).hasClass('imgRight')) {
                        box.find('.maxImg').rotate('right')
                    }
                    ;
                    if ($(this).hasClass('viewImg'))
                        window.open(viewImg);
                    return false
                });
                if (on.next('.artZoomBox').length != 0) {
                    return on.next('.artZoomBox').show()
                }
            };
            loadImg(maxImg, function() {
                width = this.width;
                height = this.height;
                tool()
            });
            $.fn.rotate = function(p) {
                var img = $(this)[0], n = img.getAttribute('step');
                if (!this.data('width') && !$(this).data('height')) {
                    this.data('width', img.width);
                    this.data('height', img.height)
                }
                ;
                var mw = img.getAttribute('maxWidth');
                if (mw == null)
                    mw = 0;
                if (mw < 1)
                    mw = img.width;
                if (mw > 460)
                    mw = 460;
                this.data('maxWidth', mw);
                if (n == null)
                    n = 0;
                if (p == 'left') {
                    (n == 0) ? n = 3 : n--
                } else if (p == 'right') {
                    (n == 3) ? n = 0 : n++
                }
                ;
                img.setAttribute('step', n);
                if (document.all) {
                    if (this.data('height') > this.data('maxWidth') && (n == 1 || n == 3)) {
                        if (!this.data('zoomheight')) {
                            this.data('zoomwidth', this.data('maxWidth'));
                            this.data('zoomheight', (this.data('maxWidth') / this.data('height')) * this.data('width'))
                        }
                        img.height = this.data('zoomwidth');
                        img.width = this.data('zoomheight')
                    } else {
                        img.height = this.data('height');
                        img.width = this.data('width')
                    }
                    img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + n + ')';
                    if ($.browser.version == 8) {
                        switch (n) {
                            case 0:
                                this.parent().height('');
                                break;
                            case 1:
                                this.parent().height(this.data('width') + 10);
                                break;
                            case 2:
                                this.parent().height('');
                                break;
                            case 3:
                                this.parent().height(this.data('width') + 10);
                                break
                            }
                    }
                } else {
                    var c = this.next('canvas')[0];
                    if (this.next('canvas').length == 0) {
                        this.css({'visibility': 'hidden', 'position': 'absolute'});
                        c = document.createElement('canvas');
                        c.setAttribute('class', 'maxImg canvas');
                        img.parentNode.appendChild(c)
                    }
                    var canvasContext = c.getContext('2d');
                    switch (n) {
                        default:
                        case 0:
                            img.setAttribute('height', this.data('height'));
                            img.setAttribute('width', this.data('width'));
                            c.setAttribute('width', img.width);
                            c.setAttribute('height', img.height);
                            canvasContext.rotate(0 * Math.PI / 180);
                            canvasContext.drawImage(img, 0, 0, img.width, img.height);
                            break;
                        case 1:
                            if (img.height > this.data('maxWidth')) {
                                h = this.data('maxWidth');
                                w = (this.data('maxWidth') / img.height) * img.width
                            } else {
                                h = this.data('height');
                                w = this.data('width')
                            }
                            c.setAttribute('width', h);
                            c.setAttribute('height', w);
                            canvasContext.rotate(90 * Math.PI / 180);
                            canvasContext.drawImage(img, 0, -h, w, h);
                            break;
                        case 2:
                            img.setAttribute('height', this.data('height'));
                            img.setAttribute('width', this.data('width'));
                            c.setAttribute('width', img.width);
                            c.setAttribute('height', img.height);
                            canvasContext.rotate(180 * Math.PI / 180);
                            canvasContext.drawImage(img, -img.width, -img.height, img.width, img.height);
                            break;
                        case 3:
                            if (img.height > this.data('maxWidth')) {
                                h = this.data('maxWidth');
                                w = (this.data('maxWidth') / img.height) * img.width
                            } else {
                                h = this.data('height');
                                w = this.data('width')
                            }
                            c.setAttribute('width', h);
                            c.setAttribute('height', w);
                            canvasContext.rotate(270 * Math.PI / 180);
                            canvasContext.drawImage(img, -w, 0, w, h);
                            break
                        }
                }
            }
        }
    };
    $('a.artZoom').live('click', function() {
        var relv = $(this).attr('rel');
        var revv = $(this).attr('rev');
        var TPT_v = $(this).attr('TPT_');
        view_topic_content(relv, revv, TPT_v);
        return false
    });
    $('a.artZoom2').artZoom();
    $('a.artZoom3').artZoom();
    $('a.artZoomAll').artZoom();
})(jQuery);

//jquery.lazyload.min.js
(function(a, b) {
    $window = a(b), a.fn.lazyload = function(c) {
        function f() {
            var b = 0;
            d.each(function() {
                var c = a(this);
                if (e.skip_invisible && !c.is(":visible"))
                    return;
                if (!a.abovethetop(this, e) && !a.leftofbegin(this, e))
                    if (!a.belowthefold(this, e) && !a.rightoffold(this, e))
                        c.trigger("appear");
                    else if (++b > e.failure_limit)
                        return!1
            })
        }
        var d = this, e = {threshold: 0, failure_limit: 0, event: "scroll", effect: "show", container: b, data_attribute: "original", skip_invisible: !0, appear: null, load: null};
        return c && (undefined !== c.failurelimit && (c.failure_limit = c.failurelimit, delete c.failurelimit), undefined !== c.effectspeed && (c.effect_speed = c.effectspeed, delete c.effectspeed), a.extend(e, c)), $container = e.container === undefined || e.container === b ? $window : a(e.container), 0 === e.event.indexOf("scroll") && $container.bind(e.event, function(a) {
            return f()
        }), this.each(function() {
            var b = this, c = a(b);
            b.loaded = !1, c.one("appear", function() {
                if (!this.loaded) {
                    if (e.appear) {
                        var f = d.length;
                        e.appear.call(b, f, e)
                    }
                    a("<img />").bind("load", function() {
                        c.hide().attr("src", c.data(e.data_attribute))[e.effect](e.effect_speed), b.loaded = !0;
                        var f = a.grep(d, function(a) {
                            return!a.loaded
                        });
                        d = a(f);
                        if (e.load) {
                            var g = d.length;
                            e.load.call(b, g, e)
                        }
                    }).attr("src", c.data(e.data_attribute))
                }
            }), 0 !== e.event.indexOf("scroll") && c.bind(e.event, function(a) {
                b.loaded || c.trigger("appear")
            })
        }), $window.bind("resize", function(a) {
            f()
        }), f(), this
    }, a.belowthefold = function(c, d) {
        var e;
        return d.container === undefined || d.container === b ? e = $window.height() + $window.scrollTop() : e = $container.offset().top + $container.height(), e <= a(c).offset().top - d.threshold
    }, a.rightoffold = function(c, d) {
        var e;
        return d.container === undefined || d.container === b ? e = $window.width() + $window.scrollLeft() : e = $container.offset().left + $container.width(), e <= a(c).offset().left - d.threshold
    }, a.abovethetop = function(c, d) {
        var e;
        return d.container === undefined || d.container === b ? e = $window.scrollTop() : e = $container.offset().top, e >= a(c).offset().top + d.threshold + a(c).height()
    }, a.leftofbegin = function(c, d) {
        var e;
        return d.container === undefined || d.container === b ? e = $window.scrollLeft() : e = $container.offset().left, e >= a(c).offset().left + d.threshold + a(c).width()
    }, a.inviewport = function(b, c) {
        return!a.rightofscreen(b, c) && !a.leftofscreen(b, c) && !a.belowthefold(b, c) && !a.abovethetop(b, c)
    }, a.extend(a.expr[":"], {"below-the-fold": function(c) {
            return a.belowthefold(c, {threshold: 0, container: b})
        }, "above-the-top": function(c) {
            return!a.belowthefold(c, {threshold: 0, container: b})
        }, "right-of-screen": function(c) {
            return a.rightoffold(c, {threshold: 0, container: b})
        }, "left-of-screen": function(c) {
            return!a.rightoffold(c, {threshold: 0, container: b})
        }, "in-viewport": function(c) {
            return!a.inviewport(c, {threshold: 0, container: b})
        }, "above-the-fold": function(c) {
            return!a.belowthefold(c, {threshold: 0, container: b})
        }, "right-of-fold": function(c) {
            return a.rightoffold(c, {threshold: 0, container: b})
        }, "left-of-fold": function(c) {
            return!a.rightoffold(c, {threshold: 0, container: b})
        }})
})(jQuery, window)

//dialog.js
__DIALOG_WRAPPER__ = {};
__ScreenLocker_HandleKey__ = null;
DialogManager = {'create': function(id) {
        var d = {};
        if (!__DIALOG_WRAPPER__[id]) {
            d = new Dialog(id);
            __DIALOG_WRAPPER__[id] = d
        } else {
            d = DialogManager.get(id)
        }
        return d
    }, 'get': function(id) {
        return __DIALOG_WRAPPER__[id]
    }, 'close': function(id) {
        if (__DIALOG_WRAPPER__[id]) {
            if (__DIALOG_WRAPPER__[id].close()) {
                __DIALOG_WRAPPER__[id] = null
            }
            return true
        } else {
            return false
        }
    }, 'onClose': function() {
        return true
    }, 'loadStyle': function() {
        var _dialog_js_path = $('#dialog_js').attr('src');
        var _path = _dialog_js_path.split('/');
        var _dialog_css = _path.slice(0, _path.length - 1).join('/') + '/dialog.css';
        $('#dialog_js').after('<link href="' + _dialog_css + '" rel="stylesheet" type="text/css" />')
    }, 'setTitle': function(id, title) {
        if (__DIALOG_WRAPPER__[id]) {
            __DIALOG_WRAPPER__[id].setTitle(title)
        }
    }};
ScreenLocker = {'style': {'position': 'absolute', 'top': '0px', 'left': '0px', 'backgroundColor': '#000', 'opacity': 0.3, 'overflow': 'hidden', 'z-index': 999}, 'masker': null, 'lock': function(zIndex) {
        if (this.masker !== null) {
            this.masker.width($(document).width()).height($(document).height());
            return true
        }
        this.masker = $('<div></div>');
        if ($.browser.msie) {
            $('select').css('visibility', 'hidden')
        }
        this.masker.css(this.style);
        if (zIndex) {
            this.masker.css('zIndex', zIndex)
        }
        this.masker.width($(document).width()).height($(document).height());
        $(document.body).append(this.masker)
    }, 'unlock': function() {
        if (this.masker === null) {
            return true
        }
        this.masker.remove();
        this.masker = null;
        if ($.browser.msie) {
            $('select').css('visibility', 'visible')
        }
    }};
function draggable(m, c) {
    var MOUSEDOWN_FLG = false;
    var _x, _y;
    $(c).mousedown(function(event) {
        MOUSEDOWN_FLG = true;
        var offset = $(m).offset();
        _x = event.pageX - offset.left;
        _y = event.pageY - offset.top;
        $(m).css({left: event.pageX - _x, top: event.pageY - _y})
    });
    $(document).mousemove(function(event) {
        if (MOUSEDOWN_FLG) {
            $(m).css({left: event.pageX - _x, top: event.pageY - _y})
        }
    }).mouseup(function(event) {
        MOUSEDOWN_FLG = false
    })
}
Dialog = function(id) {
    this.id = id;
    this.init()
};
Dialog.prototype = {'id': null, 'noTitleBar': false, 'dom': null, 'lastPos': null, 'status': 'complete', 'onClose': function() {
        return true
    }, 'tmp': {}, 'init': function() {
        this.dom = {'wrapper': null, 'body': null, 'head': null, 'title': null, 'close_button': null, 'content': null};
        this.dom.wrapper = $('<div id="dialog_object_' + this.id + '" class="dialog_wrapper"></div>').get(0);
        this.dom.body = $('<div class="dialog_body"></div>').get(0);
        if (!this.noTitleBar) {
            this.dom.head = $('<div class="dialog_head"></div>').get(0);
            this.dom.titletxt = $('<span class="dialog_title_icon"></span>').get(0);
            this.dom.title = $('<div class="dialog_title"></div>').append(this.dom.titletxt);
            this.dom.close_button = $('<span class="dialog_close_button">close</span>').get(0);
            $(this.dom.head).append(this.dom.title).append(this.dom.close_button);
            $(this.dom.body).append(this.dom.head)
        }
        this.dom.content = $('<div class="dialog_content"></div>').get(0);
        $(this.dom.body).append(this.dom.content);
        $(this.dom.wrapper).append(this.dom.body).append('<div style="clear:both;display:block;"></div>');
        $(this.dom.wrapper).css({'z-index': 9999, 'display': 'none', 'position': 'absolute'});
        $(this.dom.body).css({'position': 'relative'});
        if (!this.noTitleBar) {
            $(this.dom.head).css({'cursor': 'auto'});
            $(this.dom.close_button).css({'position': 'absolute', 'text-indent': '-9999px', 'cursor': 'pointer', 'overflow': 'hidden'})
        }
        $(this.dom.content).css({'margin': '0px', 'padding': '0px'});
        var self = this;
        if (!this.noTitleBar) {
            $(this.dom.close_button).click(function() {
                DialogManager.close(self.id)
            });
            draggable(this.dom.wrapper, this.dom.title)
        }
        $(document.body).append(this.dom.wrapper)
    }, 'hide': function() {
        $(this.dom.wrapper).hide()
    }, 'show': function(pos) {
        if (pos) {
            this.setPosition(pos)
        }
        if (__ScreenLocker_HandleKey__ == null || __ScreenLocker_HandleKey__ == '') {
            ScreenLocker.lock(999);
            __ScreenLocker_HandleKey__ = this.id
        }
        $(this.dom.wrapper).show()
    }, 'close': function() {
        if (!this.onClose()) {
            return false
        }
        $(this.dom.wrapper).remove();
        if (__ScreenLocker_HandleKey__ == this.id) {
            ScreenLocker.unlock();
            __ScreenLocker_HandleKey__ = null
        }
        return true
    }, 'setTitle': function(title) {
        $(this.dom.titletxt).html(title)
    }, 'setContents': function(type, options) {
        contents = this.createContents(type, options);
        if (typeof (contents) == 'string') {
            contents = evalscript(contents);
            $(this.dom.content).html(contents)
        } else {
            $(this.dom.content).empty();
            $(this.dom.content).append(contents)
        }
    }, 'setStyle': function(style) {
        if (typeof (style) == 'object') {
            $(this.dom.wrapper).css(style)
        } else {
            $(this.dom.wrapper).addClass(style)
        }
    }, 'setWidth': function(width) {
        this.setStyle({'width': width + 'px'})
    }, 'setHeight': function(height) {
        this.setStyle({'height': height + 'px'})
    }, 'createContents': function(type, options) {
        var _html = '', self = this, status = 'complete';
        if (!options) {
            this.setStatus(status);
            return type
        }
        switch (type) {
            case'ajax':
                var _ajax_url = options.url + '&handle_key=' + this.id;
                var _ajaxResponse = function(data) {
                    if (options.checkerror) {
                        if (options.checkerror(data) == false) {
                            return false
                        }
                    }
                    self.setContents(data);
                    self.setPosition(self.lastPos)
                };
                if (options.post) {
                    $.post(_ajax_url, options.post, function(data) {
                        _ajaxResponse(data)
                    })
                } else {
                    $.get(_ajax_url, function(data) {
                        _ajaxResponse(data)
                    })
                }
                _html = this.createContents('loading', {'text': 'loading...'});
                break;
            case'loading':
                var _css = '';
                if (options.width) {
                    _css = "width:" + options.width + "px"
                }
                _html = '<div class="dialog_loading" style="' + _css + '"><div class="dialog_loading_text">' + options.text + '</div></div>';
                status = 'loading';
                break;
            case'message':
                var type = 'notice';
                if (options.type) {
                    type = options.type
                }
                _message_body = $('<div class="dialog_message_body"></div>');
                _message_contents = $('<div class="dialog_message_contents dialog_message_' + type + '">' + options.text + '</div>');
                _buttons_bar = $('<div class="dialog_buttons_bar"></div>');
                switch (type) {
                    case'notice':
                    case'warning':
                        var button_name = "Sure";
                        if (options.button_name) {
                            button_name = options.button_name
                        }
                        _ok_button = $('<input type="button" class="u-btn" value="' + button_name + '" />');
                        $(_ok_button).click(function() {
                            if (options.close_first) {
                                DialogManager.close(self.id)
                            }
                            if (options.onclick) {
                                if (!options.onclick.call()) {
                                    return
                                }
                            }
                            if (!options.close_first) {
                                DialogManager.close(self.id)
                            }
                        });
                        $(_buttons_bar).append(_ok_button);
                        break;
                    case'confirm':
                        var yes_button_name = 'Yes';
                        var no_button_name = 'No';
                        if (options.yes_button_name) {
                            yes_button_name = options.yes_button_name
                        }
                        if (options.no_button_name) {
                            no_button_name = options.no_button_name
                        }
                        _yes_button = $('<input type="button" class="u-btn" value="' + yes_button_name + '" />');
                        _no_button = $('<input type="button" class="u-btn u-btn-c4" value="' + no_button_name + '" />');
                        $(_yes_button).click(function() {
                            DialogManager.close(self.id);
                            if (options.onClickYes) {
                                if (options.onClickYes.call() === false) {
                                    return
                                }
                            }
                        });
                        $(_no_button).click(function() {
                            DialogManager.close(self.id);
                            if (options.onClickNo) {
                                if (!options.onClickNo.call()) {
                                    return
                                }
                            }
                        });
                        $(_buttons_bar).append(_yes_button).append(_no_button);
                        break
                }
                _html = $(_message_body).append(_message_contents).append(_buttons_bar);
                break
        }
        this.setStatus(status);
        return _html
    }, 'setPosition': function(pos) {
        this.lastPos = pos;
        if (typeof (pos) == 'string') {
            switch (pos) {
                case'center':
                    var left = 0;
                    var top = 0;
                    var dialog_width = $(this.dom.wrapper).width();
                    var dialog_height = $(this.dom.wrapper).height();
                    left = $(window).scrollLeft() + ($(window).width() - dialog_width) / 2;
                    top = $(window).scrollTop() + ($(window).height() - dialog_height) / 2;
                    $(this.dom.wrapper).css({left: left + 'px', top: top + 'px'});
                    break
                }
        } else {
            var _pos = {};
            if (typeof (pos.left) != 'undefined') {
                _pos.left = pos.left
            }
            if (typeof (pos.top) != 'undefined') {
                _pos.top = pos.top
            }
            $(this.dom.wrapper).css(_pos)
        }
    }, 'setStatus': function(code) {
        this.status = code
    }, 'getStatus': function() {
        return this.status
    }, 'disableClose': function(msg) {
        this.tmp['oldOnClose'] = this.onClose;
        this.onClose = function() {
            if (msg)
                alert(msg);
            return false
        }
    }, 'enableClose': function() {
        this.onClose = this.tmp['oldOnClose'];
        this.tmp['oldOnClose'] = null
    }};

//lang.js
function lang(key) {
    var zh_cn = {loading: "正在载入..."};
    return zh_cn.loading;
}

//focus.js
jQuery.extend({unselectContents: function() {
        if (window.getSelection) {
            window.getSelection().removeAllRanges()
        } else if (document.selection) {
            document.selection.empty()
        }
    }});
jQuery.fn.extend({selectContents: function() {
        $(this).each(function(i) {
            var node = this;
            var selection, range, doc, win;
            if ((doc = node.ownerDocument) && (win = doc.defaultView) && (typeof win.getSelection != 'undefined') && (typeof doc.createRange != 'undefined') && (selection = window.getSelection()) && (typeof selection.removeAllRanges != 'undefined')) {
                range = doc.createRange();
                range.selectNode(node);
                if (i == 0) {
                    selection.removeAllRanges()
                }
                selection.addRange(range)
            } else if (document.body && typeof document.body.createTextRange != 'undefined' && (range = document.body.createTextRange())) {
                range.moveToElementText(node);
                range.select()
            }
        })
    }, setCaret: function() {
        if (!$.browser.msie) {
            return
        }
        var initSetCaret = function() {
            var textObj = $(this).get(0);
            textObj.caretPos = document.selection.createRange().duplicate()
        };
        $(this).click(initSetCaret).select(initSetCaret).keyup(initSetCaret)
    }, insertAtCaret: function(textFeildValue, isselect) {
        var textObj = $(this).get(0);
        if (document.all && textObj.createTextRange && textObj.caretPos) {
            var caretPos = textObj.caretPos;
            caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == '' ? textFeildValue + '' : textFeildValue;
            if (isselect) {
                caretPos.moveStart('character', -textFeildValue.length + 1);
                caretPos.moveEnd('character', -1);
                caretPos.select()
            }
        } else if (textObj.setSelectionRange) {
            var rangeStart = textObj.selectionStart;
            var rangeEnd = textObj.selectionEnd;
            var tempStr1 = textObj.value.substring(0, rangeStart);
            var tempStr2 = textObj.value.substring(rangeEnd);
            textObj.value = tempStr1 + textFeildValue + tempStr2;
            textObj.focus();
            var len = textFeildValue.length;
            if (isselect) {
                textObj.setSelectionRange(rangeStart + 1, rangeStart + len - 1)
            } else {
                textObj.setSelectionRange(rangeStart + len, rangeStart + len)
            }
        } else {
            textObj.value += textFeildValue
        }
    }, getSelectContents: function() {
        var textObj = $(this).get(0);
        if (document.all && textObj.createTextRange && textObj.caretPos) {
            return textObj.caretPos.text
        } else if (textObj.setSelectionRange) {
            var rangeStart = textObj.selectionStart;
            var rangeEnd = textObj.selectionEnd;
            return rangeStart == rangeEnd ? '' : textObj.value.substring(rangeStart, rangeEnd)
        } else {
            return''
        }
    }});

//textarea_autoheight.js
(function($) {
    $.fn.autoTextarea = function(options) {
        var defaults = {maxHeight: null, minHeight: $(this).height()};
        var opts = $.extend({}, defaults, options);
        return $(this).each(function() {
            $(this).bind("paste cut keydown keyup focus blur", function() {
                var height, style = this.style;
                this.style.height = opts.minHeight + 'px';
                if (this.scrollHeight > opts.minHeight) {
                    if (opts.maxHeight && this.scrollHeight > opts.maxHeight) {
                        height = opts.maxHeight;
                        style.overflowY = 'scroll'
                    } else {
                        height = this.scrollHeight;
                        style.overflowY = 'hidden'
                    }
                    style.height = height + 'px'
                }
            })
        })
    }
})(jQuery);
